我将一个项目从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"}
感谢您的任何想法。
最佳答案
正如邮件列表中回答的那样-我什至还给您做过回购-这是开箱即用的。
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-原始util或lodash或其他任何东西。原始的是
prime.merge()
关于javascript - Mootools/Prime中的类,选项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20399574/