Javascript Mootools/Prime中的类和选项

Javascript Mootools/Prime中的类和选项,javascript,class,mootools,options,Javascript,Class,Mootools,Options,我将把一个项目从Mootools迁移到Prime,但现在我遇到了“setOptions”的问题,该函数在Mootools中不起作用,在Mootools中,options对象将通过超链接合并到proto链上,并包含所有键 var A = prime({ options: { name: 'image', tag: 'span', src: '/' }, constructor: function(options){

我将把一个项目从Mootools迁移到Prime,但现在我遇到了“setOptions”的问题,该函数在Mootools中不起作用,在Mootools中,
options
对象将通过超链接合并到proto链上,并包含所有键

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"}

谢谢你的建议。

正如邮件列表上所回答的那样——我甚至为你做了一份回购协议——这在原始的情况下是开箱即用的

稍微不同的语法(sugar,这是为了让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

在prime中,您必须执行以下操作:

var B = prime({
    extend: A,
    options: Object.merge(A.prototype.options, {
        name: 'B'
    })
});
其中Object.merge是某个util-要么是prime util,要么是lodash或其他什么。在primish中是
prime.merge()