![](/img/trans.png)
[英]How to extend prototype of an object and have the same function in global scope as well?
[英]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.fn
则o1.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.