的JavaScript。如何调用同一个类的对象属性中的方法?

时间:2013-10-28 13:22:17

标签: javascript html prototypejs

这可能看起来令人困惑(或没有),但这令人难以置信。 所以我有一个类型为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 这样的变量,这个类绝对有并且被定义了,它只是因为某些原因没有把它拿起来。

帮帮我们。 :)谢谢

1 个答案:

答案 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");