Myfunction.prototype.updateMyFunction = function() {

 //do something

};

Myfunction.prototype = {

 updateMyfunction: function() {

  //do something

 }

};

Obaj wytwarzają identyczne wyniki

1
zadubz 20 listopad 2013, 15:05

2 odpowiedzi

Najlepsza odpowiedź

Pierwszy jest dodający właściwość do Myfunction.prototype, podczas gdy drugi całkowicie zastępuje Myfunction.prototype z nowym obiektem.

Wynik nie będzie zawsze identyczny. Rozważ tę sprawę -

Myfunction.prototype.oldMethod = function () {

};

Myfunction.prototype.updateMyFunction = function() {

    //do something

};

Po dodaniu ostatniej metody będziesz mógł uzyskać dostęp do oldMethod i updateMyFunction. Jeśli to zrobisz -

Myfunction.prototype.oldMethod = function () {

};

Myfunction.prototype = {

    updateMyfunction: function() {

        //do something

    }
};

Następnie oldMethod zostanie usunięty z łańcucha prototypowego (od samego prototype jest zastąpiony nowym obiektem) i nie będziesz mógł go uzyskać dostępu.

6
MD Sayem Ahmed 20 listopad 2013, 11:12

Pierwszy używa już istniejącego prototypu MyFuncti, a druga zastępuje prototyp nowym obiektem.

Niektóre zaskakujące problem z zastąpieniem prototypu:

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
0
Tibos 20 listopad 2013, 11:09