jQuery OOP基础知识

Cri*_*sty 20 oop jquery

我想开始开发jQuery游戏,因此我需要学习jQuery OOP.我有一些(足够的)C++ OOP经验(开发了一些游戏).

我知道我可以用jQuery"对象"替换C++"类",但我不知道它究竟是如何工作的.

jQuery还有更高级的"选项",比如C++吗?(抽象类/对象,inheirtance等...)

你能解释一下吗?(或者给我一些好的javascript OOP教程的链接).

Ray*_*nos 51

JavaScript中的OOP编程可以通过多种方式完成.周围有很多模式.

我将向您展示两个,一个对象继承的实现和一个对象组合的实现.

这确实与jQuery完全无关.jQuery应该用于DOM操作和事件操作.您不应该基于jQuery对象创建核心对象和构造函数.在游戏中,jQuery的角色是读取键盘输入并可选择将图形渲染到DOM中(如果<canvas>由于某种原因你没有使用它).

实例

遗产

var Constructor = function(name) {
    this.name = name
};

Constructor.prototype.mymethod = function() {
    alert("my name is : " + this.name);
};

var obj = new Constructor("foo");
obj.mymethod(); // my name is : foo
Run Code Online (Sandbox Code Playgroud)

这里定义了一个Constructor可以调用以创建新对象的函数.你引用构造函数中的对象this.

您可以将(静态)方法和变量添加到将由对象继承的构造函数的原型中.

function inherits(child, parent) {
    var f = new Function;
    f.prototype = parent.prototype;
    f.prototype.constructor = parent;
    child.prototype = new f;
    child.prototype.constructor = child;
}
Run Code Online (Sandbox Code Playgroud)

您可以使用将inherits构造函数的原型设置为不同构造函数的实例的函数.这意味着该父对象的所有方法和属性都可以在子对象上使用

var SecondConstructor = function(name) {
    this.name = name + "bar";
};
inherits(SecondConstructor, Constructor);
var obj = new SecondConstructor("foo");
obj.mymethod(); // my name is : foobar
Run Code Online (Sandbox Code Playgroud)

这是JavaScripts的原型继承.基本上,您将函数的原型设置为特定对象.然后,当您使用该函数创建对象时,这些对象将实现原型.

组成

使用原型实际上并不是必需的,您也可以使用对象组合.这种方法确实需要很好地理解this您可以在其他地方阅读的状态.

我要作弊并将一些繁琐的帮助函数委托给underscore.js

var Constructor = function(name) {
    this.name = name;

    this.mymethod = function() {
        alert("my name is : " + this.name);
    };
};

var SecondConstructor = function(name) {
    var constructor = new Constructor(name + "bar");
    _.bindAll(constructor);
    _.extend(this, {
        "mymethod": constructor.mymethod
    });
};

var obj = new SecondConstructor("foo");
obj.mymethod();
Run Code Online (Sandbox Code Playgroud)

这里,SecondConstructor为自己创建一个Constructor实例,而不是继承它.然后它绑定该this构造函数对象的所有方法的引用,以便我们可以将调用委托mymethod给我们自己的构造函数对象.这仅适用于方法,但这不应该是一个问题,因为你真的不应该有公共字段.