Mootools和Win8 Store应用程序开发

时间:2012-09-14 14:59:32

标签: javascript oop mootools windows-runtime winjs

问题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.defineWinJS.Class.deriveWinJS.Class.mix在WinJS重音中说这个?

1 个答案:

答案 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");