1

问题一:

我们可以在开发 Windows 8 Metro 风格应用程序时使用Mootools 的 Mixin 模式吗?换句话说,我们可以用 Mootool 的类覆盖/替换/扩展WinJS.Class吗?

问题2:

例如,在 Mootools 中,如果我们有一个基类Human:

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)一个接口类Warrior:

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.defineWinJS.Class.deriveWinJS.Class.mix用 WinJS 口音说这个?

4

1 回答 1

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 进行混入:

WinJS.Class.mix(Ninja, Warrior);

你应该做好准备:

var clyde = new Ninja("Clyde", "12", "confused");
于 2012-09-17T02:16:50.983 回答