绑定功能没有原型

时间:2017-01-12 14:24:53

标签: javascript

来自ecma-262 spec

  

使用Function.prototype.bind创建的函数对象没有   原型属性或[[代码]],[[FormalParameters]]和   [[范围]]内部属性。

听起来我无法做那样的事(简单例子)

const persone = {
  name: 'Hello World',
  getName(){
    return this.name;
  }
};

const cat = {
  name: 'Cat'
}

const dog = {
  name: 'Dog'
}

console.log(persone.getName.bind(cat).bind(dog)()) // Cat

为什么限制?有没有陷阱?

1 个答案:

答案 0 :(得分:0)

因为bind包装你的函数,插入它。再次包装然后不起作用。

它是这样的:

const persone = {
  name: 'Hello World',
  getName(){
    return this.name;
  }
};

const cat = {
  name: 'Cat'
}

const dog = {
  name: 'Dog'
}
//its like doing this:
var methodNoThis = personne.getName;
var methodCatThis = function(){ return methodNoThis.apply(cat);
var methodDogOnCatThis = function(){ return methodCatThis.apply(dog);

文档

它也在Mozzila Docs上声明:

bind()函数创建一个新的绑定函数(BF)。 BF是一个包含原始函数对象的外来函数对象(来自ECMAScript 2015的术语)。调用BF通常会导致执行包装函数。