调用原型方法与实例方法之间的区别?

时间:2017-03-20 15:16:10

标签: javascript

下面两种类型的调用bar会有什么区别?

function Foo(){

}

Foo.prototype.bar = function(){
    console.log('bar called');
};

Foo.prototype.bar();
new Foo().bar();

https://jsfiddle.net/abn6gfm0/

3 个答案:

答案 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)