在JavaScript中编写原型函数的这两种方式之间有什么区别

时间:2013-11-20 11:05:55

标签: javascript oop

Myfunction.prototype.updateMyFunction = function() {

 //do something

};

Myfunction.prototype = {

 updateMyfunction: function() {

  //do something

 }

};

他们都产生相同的结果

2 个答案:

答案 0 :(得分:6)

第一个是向Myfunction.prototype添加属性,而第二个是用新对象完全替换Myfunction.prototype

结果并不总是相同的。考虑这种情况 -

Myfunction.prototype.oldMethod = function () {

};

Myfunction.prototype.updateMyFunction = function() {

    //do something

};

添加最后一种方法后,您将能够稍后访问oldMethodupdateMyFunction。如果你这样做 -

Myfunction.prototype.oldMethod = function () {

};

Myfunction.prototype = {

    updateMyfunction: function() {

        //do something

    }
};

然后oldMethod将从原型链中删除(因为prototype本身正在被新对象替换),您将无法再访问它。

答案 1 :(得分:0)

第一个使用已存在的MyFunction原型,而第二个使用新对象替换原型。

更换原型时出现了一些令人惊讶的问题:

var MyFunction = function(){
};

var obj = new MyFunction();

MyFunction.prototype = {    
 updateMyfunction: function() {}
};


var obj2 = new MyFunction();


console.log(obj2 instanceof MyFunction) // true as expected
console.log(obj instanceof MyFunction) // false because the prototype changed