原型设计与直接命名功能有什么不同?

时间:2011-06-03 23:31:06

标签: javascript

例如:

function obj(val) {
    this.val = val;
}
obj.prototype.newfunction = function(){
    return this.val;
};

完全不同于此?

function obj(val) {
    this.val = val;
    this.newfunction = function(){
        return this.val;
    }
}

我意识到prototype的原因是你可以为你没有创建的对象添加方法,但是有没有理由在第一个块上使用第二个块,反之亦然?

1 个答案:

答案 0 :(得分:3)

使用第一种方法,你不能用第二种方法调用obj.newfunction()。

当你使用额外的功能扩展原型时(比如你的第一个例子),这个额外的功能将可用于你使用new operator从这个函数创建的所有对象。但是这个功能不会成为函数本身的一部分。当您扩展原型时,此函数中的所有现有对象将立即看到所有更改。

对于第二种情况,您正在使newfunction成为obj函数本身的属性。

我建议你阅读这篇文章,这将有助于澄清原型属性的概念 http://joost.zeekat.nl/constructors-considered-mildly-confusing.html