mootools / class / objectinstance не работает - PullRequest
0 голосов
/ 23 сентября 2010

Я понятия не имею, почему я получаю 'b', а не 'a', когда я вызываю a.get (). Кто-нибудь может мне помочь?

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 ]

3 голосов
/ 23 сентября 2010

вы должны использовать класс Options как миксин и 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и не расширять (объединение отменяет связь): http://www.jsfiddle.net/dimitar/cqd8P/

но какой в ​​этом смысл, поскольку у вас нет this.options, который существует (вам нужно передать объект, чтобы расширить его / объединить с другим).вы также можете просто сделать:

this.options = {
    name: n
};

вы действительно хотите this.setOptions

пс для 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
0 голосов
/ 23 сентября 2010

Разве вы не должны использовать new строку оператора 3?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...