繁体   English   中英

在javascript中,新的对象函数如何扩展同名的原型函数?

[英]in javascript, how does a new object function extend a prototype function of same name?

创建对象时,我希望使用新功能扩展现有原型功能的功能。 新函数需要调用原始原型函数来执行,但是显然它们在同一个命名空间中。

Obj = function(i,newFn) {
   this.i = i;
   if( newFn ) this.fn = newFn;
}
Obj.prototype.fn = function(a) { return a+this.i; }

o1 = new Obj1( 3, function(a) { if( a<0 ) return 0; return ORIGINAL.fn(a) } );

如果ORIGINAL是this.fno1.fn变为非终止递归

我如何引用Obj.prototype.fn()从内部o1.fn()


根据@PeterOlsen的回答,

o1 = new Obj1( 3, function(a) { return Obj.prototype.fn.call(this,a) } );

如何从o1.fn()中引用Obj.prototype.fn()?

很简单,用Obj.prototype.fn引用它。

您应该能够到达那里,您可能需要比预期的走得更远。 尝试类似

Obj = function(i,newFn) {
   this.i = i;
   if( newFn ) this.fn = newFn;
}
Obj.prototype.fn = function(a) { return a+this.i; }

o1 = new Obj( 3, function(a) { if( a<0 ) return 0; return this.constructor.prototype.fn.apply(this, arguments) } );

在关闭时,获取用于制作此对象的构造函数的原型,然后使用.apply()调用要使用this对象的实例方法以及传入的参数。

或者像彼得·奥尔森说,而不是this.constructor.prototype.fn可以使用Obj.prototype.fn ,但你仍然需要为使用.call().apply()以确保您执行方法正确的范围,否则this不会指向您认为应该的范围。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM