这可能看起来令人困惑(或没有),但这令人难以置信。 所以我有一个类型为object hospot 的类属性,它基本上已声明:
Cannon.prototype.hotspot = {stuff: this.blah(...) };
现在 bla()方法实际上也是'class'的原型。
Cannon.prototype.blah = function() { ... };
现在我遇到一个问题,它说方法blah()不存在,我假设是因为' this'属于对象 hotspot <的上下文/ em>而不是 Cannon 'class'。现在我想知道的是我如何调用方法 blah()?
顺便说一下,我试图用这个替换 this.blah():
Cannon.prototype.blah.call(this, ...);
但是有一个新问题。它说方法中的一些变量是未定义的。现在这个方法有像 this.x 这样的变量,这个类绝对有并且被定义了,它只是因为某些原因没有把它拿起来。
帮帮我们。 :)谢谢
答案 0 :(得分:0)
Thera是两个对象:Cannon和Hotspot。因为“Cannon.prototype.hotspot”上的“{..}”是一个对象创建文字。
您需要将它们分开:
function Cannon(hotspot) {
if ( hotspot.constructor == Hotspot ) {
this.hotspot = hotspot;
// this.hotspot = new Hotspot();
this.hotspot.setCannon(this);
} else {
throw "type mismatch: hotspot"
}
}
// Less Flexible Constructor
// No need to pass "Hotspot" object
// function Cannon() {
// this.hotspot = new Hotspot();
// this.hotspot.setCannon(this);
// }
Cannon.prototype.blah = function(a){
alert("Hello "+a);
};
function Hotspot() {
this.cannon = null;
}
Hotspot.prototype.setCannon = function(cannon){
if ( cannon.constructor == Cannon ) {
this.cannon = cannon;
} else {
throw "type mismatch: cannon"
}
};
Hotspot.prototype.stuff = function(a){
if ( this.cannon ) {
this.cannon.blah(a);
}
};
您可以测试一下:
var hotspot = new Hotspot();
var aCannon = new Cannon(hotspot);
aCannon.hotspot.stuff("World");
或
var aCannon = new Cannon( new Hotspot() );
aCannon.hotspot.stuff("World");