类,Mootools / Prime中的选项

时间:2013-12-05 12:05:06

标签: javascript class mootools options

我将一个项目从Mootools迁移到Prime,但是现在我遇到了“setOptions”的问题,该函数不能像Mootools一样工作,options对象将通过超级原型链合并包含所有键。

var A = prime({
    options: {
        name: 'image',
        tag: 'span',
        src: '/'
    },
    constructor: function(options){
        this.setOptions(options);
    },
    getOptions: function(){
        console.log(this.options);
    }
});

var B = prime({
    inherits: A,
    options: {
        name: 'B'
    },
    some: function(){
        return;
    }
});

mixin(A, Options);
mixin(B, Options);

var b = new B({
    tag: 'div'
});

b.getOptions(); //the result should be: {name: "B", tag: "div", src: "/"} but is {name: "B", tag: "div"}

感谢您的任何想法。

1 个答案:

答案 0 :(得分:3)

正如邮件列表中的回答 - 我甚至为您制作了一个回购 - 这是一种开箱即用的方式。

https://bitbucket.org/DimitarChristoff/primish-example/src

略有不同的语法(糖,它已经完成使mootools用户满意)但它也合并了像mootools这样的选项:

var A = prime({
    options: {
        name: 'image',
        tag: 'span',
        src: '/'
    },
    implement: [options],
    constructor: function(options){
        //console.debug(this.options);
        this.setOptions(options);
    },
    getOptions: function(){
        console.log(this.options);
    }
});

var B = prime({
    extend: A,
    options: {
        name: 'B'
    }
});

var C = prime({
    extend: B,
    options: {
        name: 'C'
    }
});

var c = new C({
    tag: 'div'
});

c.getOptions(); // as expected, all 3 options merged from right to left

请注意明显缺少额外的mixin()废话和熟悉的extend字词,而不是inherits

在素数中你必须做类似的事情:

var B = prime({
    extend: A,
    options: Object.merge(A.prototype.options, {
        name: 'B'
    })
});

其中Object.merge是一些util - 或者是prime util或者lodash或者其他什么。在原始的prime.merge()