问题1:
我们可以在开发Windows 8 Metro风格应用时使用Mixin pattern of Mootools吗?换句话说,我们可以用Mootool的类覆盖/替换/扩展WinJS.Class吗?
问题2:
例如,在Mootools中,如果我们有基类人类:
var Human = new Class({
initialize: function(name, age) {
this.name = name;
this.age = age;
},
isAlive: true,
energy: 1,
eat: function() {
this.energy = this.energy + 1; //same as this.energy++
}
});
(使用Mixin)接口类战士:
var Warrior = new Class({
energy: 100,
kills: 0,
attack: function(target) {
target.isAlive = false;
this.energy = this.energy - 5;
this.kills++;
}
});
和派生/具体类忍者:
var Ninja = new Class({
Extends: Human,
Implements: Warrior,
initialize: function(name, age, side) {
this.side = side;
this.parent(name, age);
}
});
我们如何使用WinJS.Class.define,WinJS.Class.derive和WinJS.Class.mix在WinJS重音中说这个?
答案 0 :(得分:3)
如果您想在WinJS应用程序中使用MooTools,它应该只适用于大多数情况。启动时可能会有一些警告,但只要它不违反动态生成内容的安全框架,MooTools本身应该可以工作。我不会尝试将MooTools的代码拼接到WinJS中,只是按原样使用它。
WinJS.Class方法就像MooTools一样,定义了JavaScript原型。无论您使用的是MooTools还是WinJS,您定义的“类型”都应该协同工作。
就你的第二个问题而言,我认为你可以用WinJS完成所需的一切,语法也不同。
定义“人类”构造函数非常简单:
var Human = WinJS.Class.define(
function(name, age) {
this.name = name;
this.age = age;
},
{
isAlive: true,
energy: 1,
eat: function() {
this.energy = this.energy + 1;
}
}
);
mixin被简单地定义为一个对象:
var Warrior = {
energy: 100,
kills: 0,
attack: function(target) {
target.isAlive = false;
this.energy = this.energy - 5;
this.kills++;
}
};
要进行派生,可以使用WinJS.Class.derive。这只给你继承部分:
var Ninja = WinJS.Class.derive(Human,
function(name, age, side) {
this.side = side;
Human.call(this, name, age);
}
);
然后你通过WinJS.Class.mix进行mixin:
WinJS.Class.mix(Ninja, Warrior);
你应该全力以赴:
var clyde = new Ninja("Clyde", "12", "confused");