mootools / class / objectinstance不起作用

时间:2010-09-23 11:37:19

标签: javascript mootools

当我调用a.get()时,我不知道为什么我得到'b'而不是'a'。有人能帮助我吗?

var tclass = new Class({
initialize:function(n){
    this.options = Object.extend({'name' : n});
},
get:function(){
    return this.options.name;
}
});

a = new tclass('a');
b = new tclass('b');
a.get()  // b

2 个答案:

答案 0 :(得分:3)

你应该使用Options类作为mixin和setOptions来正确地进行合并:

var tclass = new Class({
    Implements: [Options],
    initialize: function(n) {
        this.setOptions(n);
    },
    get: function() {
        return this.options.name;
    }
});


var a = new tclass({
    name: 'a'
});
var b = new tclass({
    name: 'b'
});
alert(a.get()); // a

话虽如此,在你的例子中,我得到了一个不同的响应 - 如预期的那样 - 但是通过$ merge而不是extend(merge unlink): http://www.jsfiddle.net/dimitar/cqd8P/

然而有什么意义,因为你没有this.options存在(你需要传递一个对象来扩展它/将它与另一个对象合并)。你也可以这样做:

this.options = {
    name: n
};

你真的想要this.setOptions

P.S。对于mootools 1.11实现方式不同:

var tclass = new Class({
    initialize: function(n) {
        this.setOptions(n);
    },
    get: function() {
        return this.options.name;
    }
});

tclass.implement(new Options);

var a = new tclass({
    name: 'a'
});
var b = new tclass({
    name: 'b'
});
alert(a.get()); // a

答案 1 :(得分:-1)

您不应该使用new运算符第3行吗?

this.options = (new Object()).extend({'name' : n});