对象如何在Javascript中引用自身?
我在javascript中尝试继承,并编写了以下两个函数:对象如何在Javascript中引用自身?,javascript,oop,object,reference,this,Javascript,Oop,Object,Reference,This,我在javascript中尝试继承,并编写了以下两个函数: Object.prototype.inherits=function(obj){this.prototype=new obj;} Object.prototype.pass=function(obj){obj.prototype=new this;} 此代码非常有效: Dog.inherits(Animal); 但以下几点失败了: Animal.pass(Dog); 据我所知,我的传递函数不起作用,因为“this”不是对对象实例本
Object.prototype.inherits=function(obj){this.prototype=new obj;}
Object.prototype.pass=function(obj){obj.prototype=new this;}
此代码非常有效:
Dog.inherits(Animal);
但以下几点失败了:
Animal.pass(Dog);
据我所知,我的传递函数不起作用,因为“this”不是对对象实例本身的引用?如果是这样的话,我如何从对象内部引用它呢
提前谢谢 事实上,这两个人做的完全一样:
Dog.prototype = new Animal;
方法中的这个值将引用调用引用的基本对象,在以下情况下:
Dog.inherits(Animal);
this
值将引用Dog
构造函数,obj
参数将是Animal
函数
当你打电话时:
Animal.pass(Dog);
this
值将引用Animal
函数,其最终执行的操作与继承
方法完全相同,但相反
我建议您不要扩展对象.prototype
对象,因为它会给您带来很多问题,例如,这两个属性将在任何for in
循环中枚举,例如:
for (var prop in {}) { // <-- an empty object!
alert(prop); // will alert 'inherits' and 'pass'
}
for(var prop in{}{/对我有效,测试代码如下:
function Animal() {}
Animal.prototype.isanimal= 1;
function Dog() {}
Animal.pass(Dog);
Dog.prototype.isdog= 2;
alert(new Dog().isanimal); // 1
alert(new Dog().isdog); // 2
但是,请记住,newthis
或newobj
将调用函数this/obj
,创建一个新的完整实例。如果该函数中的构造函数代码期望接收一些参数或设置实例状态,则可能会出现问题。要创建新的this
,而不调用e> 这
作为一个函数,您可以使用不执行任何操作的其他构造函数:
function nonconstructor() {}
nonconstructor.prototype= this.prototype;
obj.prototype= new nonconstructor();
另外,您应该避免在对象上进行原型设计。这会给使用对象作为通用查找映射的代码带来麻烦。因为您似乎只使用构造函数,所以在函数上进行原型设计应该能满足您的需要,而且安全得多。是的,这两个函数都工作得很好,我猜我犯了一个错误当我测试它的时候…谢谢你的建议。