下面两种类型的调用bar
会有什么区别?
function Foo(){
}
Foo.prototype.bar = function(){
console.log('bar called');
};
Foo.prototype.bar();
new Foo().bar();
答案 0 :(得分:0)
正如Denys在评论中指出的那样,this
背景将会有所不同。第一个调用将this
设置为引用Foo.prototype,而第二个调用将this
设置为Foo。
另一个区别是你在Foo中覆盖了bar()函数。这将有效地掩盖原型,第二次调用将是函数覆盖。
答案 1 :(得分:0)
Foo.prototype.bar()
调用类的Foo原型中的方法。
使用原型声明你会说:所有Foo对象都有一个方法bar()。使用上面的命令,您可以调用方法栏(),该方法栏将被复制到每个实例(使用new
关键字)。
new Foo().bar()
调用附加到bar实例的方法
您正在创建一个类型为Foo的新对象(其中包含方法bar()),然后在其中调用bar()方法。
答案 2 :(得分:0)
function Foo() {
this.some = 'Instance';
}
Foo.prototype.some = 'Permanent';
Foo.prototype.bar = function(){
console.log( this.some );
};
Foo.prototype.bar();
new Foo().bar();
var a = { some: 'MyText' }
Foo.prototype.bar.call(a)