在学习angularjs时,我发现如果将对象放在原型对象中,则从该原型继承的实例将在分配时更改原型的对象。
范例:
function Person(name) {this.name = name;}
Person.prototype = {species : "homo-sapiens" , characteristics : { "legs" : 2 , "height" : 175}}
var joe = new Person("joe");
joe.characteristics.legs = 1 ;
console.log(Person.prototype.characteristics) //Object {legs: 1, height: 175}
我展示的是原型的实例(joe)更改了对象在原型本身上的值,因为它继承了对象(特征)而不是基元。
我的问题如下:在大多数情况下,原型是否意味着保存基元? (在大多数情况下,您永远不会希望实例更改原型的值。Angular.js实际上会这样做,但是在极少数情况下,您实际上希望子实例写入原型)。如果您确实想在原型上分配对象而不分配实例时将其放置在原型上,该怎么办?
最佳答案
这实际上与prototype
无关,而只是一般的JS行为。
解决方案是从构造函数中的原型复制对象,
function Person() {
this.characteristics = angular.copy(this.characteristics);
}
Person.prototype = { whatever };
上面假设
angular.copy
功能可以使用角度。否则,您将需要通过迭代属性并将其复制到新对象中来手动复制对象。关于javascript - 原型(prototype)内的Javascript对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20310809/