jQuery OOP 基础知识

标签 jquery oop

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

我知道我可以用 jQuery“对象”替换 C++“类”,但我不知道它到底是如何工作的。

jQuery 是否还有像 C++ 一样更高级的“选项”? (抽象类/对象、继承等...)

你们能给我解释一下吗? (或者给我一些优秀的 javascript OOP 教程的链接)。

最佳答案

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

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

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

Live example

继承

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

这里定义了 Constructor您可以调用该函数来创建新对象。您可以使用 this 引用构造函数内的对象。 .

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

function inherits(child, parent) {
    var f = new Function;
    f.prototype = parent.prototype;
    f.prototype.constructor = parent;
    child.prototype = new f;
    child.prototype.constructor = child;
}

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

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

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

构图

使用原型(prototype)实际上并不是必需的,您也可以使用对象组合来代替。这种方法确实需要很好地理解this您可以阅读 elsewhere 的状态.

我将作弊并将一些繁琐的辅助函数委托(delegate)给 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();

这里 SecondConstructor 为自己创建了一个 Constructor 实例,而不是继承它。然后它绑定(bind) this 的引用对该构造函数对象的所有方法进行调用,以便我们可以将调用委托(delegate)给 mymethod到我们自己的构造函数对象。这仅适用于方法,但这不应该成为问题,因为您确实不应该拥有公共(public)字段。

关于jQuery OOP 基础知识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5134208/

相关文章:

javascript - 替换 iframe jquery 中的 HTML

javascript - asp.net 中的按钮有时不起作用

C++:矩阵计算器的高级类模型

java - 跟踪复杂过程的部分结果的设计模式

javascript - AngularJS - 是依赖注入(inject)还是多重继承?

javascript - 在 <form> 之外输入标签并提交表单

javascript - jQuery 包裹结束标签直到相同的开始标签

javascript - 使用 Javascript 从一个 div 获取信息到另一个 div

Java:双向组合示例

javascript - 从实例变量名中找出实例变量名