javascript - 为什么对方法使用原型(prototype)而不是 this.methodName

标签 javascript oop prototype-programming

<分区>

Possible Duplicate:
Advantages of using prototype, vs defining methods straight in the constructor?

为什么使用:

Person.prototype.toString = function() { return this.name; }

结束

Function Person(name) { 
    this.name = name;
    this.toString = function() { 
        return this.name;
    } 
}

最佳答案

那么,由于代码重用和继承,您应该使用原型(prototype)。
基本上,如果您将一个方法绑定(bind)到 this 关键字,那么您只是将该方法提供给该特定实例,而使用原型(prototype)时,您将为该类的所有实例编写该方法。
例如:

function Person(name) {
    this.name = name;
    this.toString = function() {
        return this.name;
    }
}
var bob = new Person('Bob');
var jim = new Person('Jim');
jim.toString = function() {
    return "I have amnesia, I forgot my name!";
};

现在,虽然 bobjim 都是人(同一类的实例),但他们的行为不同,因为他们有自己的一套规则(方法)他们依靠。
如果您要使用原型(prototype):

function Person(name) {
   this.setName(name);
}
Person.prototype = {
    name : 'default name',
    setName : function(name) {
        this.name = name;
    },
    toString : function() {
       return this.name;
    }
};
var bob = new Person('Bob');
var jim = new Person('Jim');
Person.prototype.toString = function() {
    return "I have amnesia, I forgot my name!";
};

现在,你们所有人的行为都一样。
使用原型(prototype)继承有利于代码重用,并且不会将不必要的重复内容加载到内存中。 + 以这种方式更新要容易得多。

关于javascript - 为什么对方法使用原型(prototype)而不是 this.methodName,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7511328/

相关文章:

javascript - 如何格式化折线图谷歌图表 Material 上的轴?

javascript - 一起使用 Javascript 命名空间闭包和原型(prototype)会失败吗?

java - 这是否违反单一责任原则?

实现相同接口(interface)的枚举上的Java开关

Javascript:访问原型(prototype)的公共(public)方法不起作用

javascript - 在 NodeJS 中构建内置模块原型(prototype)

javascript - 父作用域中的变量在匿名函数中没有被改变

Javascript - 颜色示例代码

javascript - 如何筛选 querySelectorAll 结果?

android,面向对象编程与性能设计