我试图用另一种延长一个构造函数,用原型:的JavaScript - 将两个构造
var objA = function(name){
var obj = this;
this.test.name = name;
window.setTimeout(function(){
console.log(obj.test.name)
}, 1)
}
var objB = function(name){
this.name = 'test'
}
objA.prototype.test = new objB();
var a = ['A', 'B', 'C', 'D']
for(var i = 0; i < a.length; i++){
new objA(a[i])
}
这种方法对一个对象的伟大工程,但如果(在这个例子中)我想创建多个,似乎最后一项('D')会覆盖前一项,因为在所有4种情况下,obj.test.name
返回D
。也许有人可能会指出我做错了什么,或者可能是其他解决方案。谢谢。
它更容易混淆,直接重新分配实例的原型时,它只会影响实例instanceOfA.test = [1,2,3]不会影响其他A实例的测试属性。但是如果A会有像A.prototype.anArray = []然后instanceOfA.anArray.push(“22”)的原型的数组将影响其他实例。因此,直接给原型分配一个新的值**。test = **不会影响其他实例,而是直接分配原型的属性**。test.name = **会影响其他实例。 – HMR 2013-05-10 09:06:20
您可以通过在objA主体中进行下列操作来继承其他函数:objB.call(this)将objB函数体中定义的所有变量作为** this.something = ** objA的一部分它不是与原型设计相同,原型更像静态函数/属性,其中所有实例共享原型并设置objA.prototype = new objB(),然后再执行objB.prototype.somethingNew = ...然后objA和objB的所有实例都将具有somethingNew – HMR 2013-05-10 09:15:22
@HMR数组的情况下,只有[该实例没有同名的属性](http://jsfiddle.net/mpxjQ/2/)。否则,它只会影响实例。 – Joseph 2013-05-10 09:15:50