Javascript 为什么可以';设置';原型&x27;使用';绑定';?
考虑以下代码:Javascript 为什么可以';设置';原型&x27;使用';绑定';?,javascript,prototype,Javascript,Prototype,考虑以下代码: function foo(something) { this.a = something; } var obj1 = {}; var bar = foo.bind(obj1); 现在不执行以下语句: bar.prototype.newprop = "new"; // Cannot execute this 据我所知,每个函数都有一个原型对象。那么为什么我们不能执行上面的语句呢 bar确实是一个我们可以称之为的函数: bar(2); console.log(obj1.a
function foo(something) {
this.a = something;
}
var obj1 = {};
var bar = foo.bind(obj1);
现在不执行以下语句:
bar.prototype.newprop = "new"; // Cannot execute this
据我所知,每个函数都有一个原型对象。那么为什么我们不能执行上面的语句呢
bar确实是一个我们可以称之为的函数:
bar(2);
console.log(obj1.a); // 2
.bind()
返回的函数没有原型对象。你可以给它一个:
bar.prototype = { newprop: "new" };
并非“每个函数都有一个原型对象”。每个函数都可以有一个prototype对象,但“prototype”属性的值可以是任何值,包括null
或未定义的
此外,有些“特殊”函数在所有情况下都可能与普通函数不同。请参阅:
Function.prototype.bind(thisArg,…args)
[……]
注1:使用Function.prototype.bind创建的函数对象是外来对象。它们也没有原型
属性
据我所知,每个函数都有一个原型对象
每个规则都有例外:-)您发现了一个:绑定函数没有.prototype
属性,因为它们不需要它。当您使用new
调用绑定函数时,它将原始函数作为构造函数调用,使用原始的.prototype
对象作为新实例的原型
事实上,由于ECMAScript 6,许多函数都没有对象的.prototype
属性,因为它们不是构造函数-不能用new
调用它们,因此它们不需要它。其中包括
- 箭头函数(
()=>{…}
)
- 方法(
method(){…}
在对象文本和类中)
- 内置非构造函数(如
Math.sin
)
向原型添加属性意味着您希望使用函数作为构造函数来创建对象
当您通过调用函数上的new
来创建一个对象时,this
值就是正在创建的新对象。因此,将此
绑定到另一个值是没有意义的。通过向该函数添加原型属性,您想做什么?@Pointy只是试图理解原型和绑定。您能告诉我们,什么时候使用绑定方法而不是调用和应用。@Bearniti呃,它们做完全不同的事情吗?