我正在使用protypal继承,我想在基类上调用重写的方法。在PHP中,我可以使用parent :: functionName来做到这一点。这可能使用JavaScript protypal继承?有没有相当于PHP的'父'与JavaScript原型继承?
考虑下面的例子:
doSomething的所述的
我正在使用protypal继承,我想在基类上调用重写的方法。在PHP中,我可以使用parent :: functionName来做到这一点。这可能使用JavaScript protypal继承?有没有相当于PHP的'父'与JavaScript原型继承?
考虑下面的例子:
doSomething的所述的
随着代码定义为I有
doSomething的在B:
var A = function(){
this.doSomething = function(){
console.log('doSomething in A');
};
};
var B = function() {
this.doSomething = function(){
//I would like to call A.doSomething()
//I tried this.prototype.doSomething() and A.doSomething.call(this), but neither works
console.log('doSomething in B');
};
};
B.prototype = new A();
var test = new B();
test.doSomething();
说我在控制台寻找的输出是它在下面的小提琴中:http://jsfiddle.net/JAAulde/psdym/2/
最好的方法是.call()或.apply()A的方法在B的内部:
//Inside of B.doSomething
A.prototype.doSomething.call(this, arg1, arg2);
或者,简单地传递,在一个走进B.doSomething()一举
//Inside of B.doSomething
A.prototype.doSomething.apply(this, arguments);
一个惊人的书(我的一个朋友写的)学习有关的各种图案继承所有PARAMS在JS是http://www.amazon.com/JavaScript-Design-Patterns-Recipes-Problem-Solution/dp/159059908X
你的意思是'B.prototype'?在这个例子中'A.prototype'是空的。 – Reid 2011-04-01 01:54:35
如果函数在构造函数中被声明,会在'A.prototype'上使用'doSomething'吗? – sdleihssirhc 2011-04-01 01:54:36
啊,对不起,我们不能仔细关注确切的例子。我的回答并不完全正确,虽然它会与原始代码的不同设置... – JAAulde 2011-04-01 01:57:16
,最好,如果参考,创建对象时创建
var parent = ...;
实际上对父母而言是需要的 - 这不如人们所期望的那么高。然后根据需要使用。
我个人认为术语“对象”中提到的JavaScript是一种误导,因为
object == function == closure
根本上给一个对象性的工具,但不限制于正规的对象/继承约束。另一方面,它使流畅,易变的语言;在缺点方面,你需要在需要的时候填写自己缺失的部分。
我知道你在说什么,但我不认为这很“容易”,因为JS会让习惯于经典继承的人们感到困惑(比如PHP,虽然它的实现很片面) 。为了在JS中获得经典的继承,需要大量的鞋子,并且通常会揭示对语言和其功能范式的误解(< - 双语!)。 – JAAulde 2011-04-01 11:52:12
退房http://stackoverflow.com/questions/183702/access-parents-parent-from-javascript-object - 看起来像有一个答案。 – 2011-04-01 01:59:20
@Demian。谢谢,不知道这适用于protypal继承虽然。 – 2011-04-01 02:29:45