使用此V / s原型的Javascript定义方法

时间:2015-01-29 13:58:57

标签: javascript prototypal-inheritance

在面向对象的Javascript中,我们可以将对象内部的方法定义为

this.myMethod = function() {

}

OR

我们可以使用原型方式

MyClass.prototype.myMethod = function() {

}

这两种技术有什么区别?

1 个答案:

答案 0 :(得分:1)

首先:

function Person(name){
    this.name = name
    this.sayHi = function(){
        return 'Hi, I am ' + this.name
    }
}

第二

function Person(name){
    this.name = name
}
Person.prototype.sayHi = function(){
    return 'Hi, I am ' + this.name
}

在第一个版本中,每次创建一个人时,都会为他创建一个新的sayHi函数,就像在第二个版本中一样,只创建一个sayHi函数,并在所有创建的人之间共享 - 因为Person.prototype是他们的父母。因此,在原型上声明方法可以提高内存效率。

来源: http://tobyho.com/2010/11/22/javascript-constructors-and/