当我调用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
答案 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});