2013-11-20 37 views
1
Myfunction.prototype.updateMyFunction = function() { 

//do something 

}; 

Myfunction.prototype = { 

updateMyfunction: function() { 

    //do something 

} 

}; 

書面方式原型函數的這兩個方面,他們都產生相同的結果什麼是JavaScript中

回答

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本身正與新對象代替),你將無法再訪問它。

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