我想开始开发 jQuery 游戏,因此我需要学习 jQuery OOP。我对 C++ OOP 有一些(足够的)经验(开发了一些游戏)。
我知道我可以用 jQuery“对象”替换 C++“类”,但我不知道它到底是如何工作的。
jQuery 是否还有像 C++ 一样更高级的“选项”? (抽象类/对象、继承等...)
你们能给我解释一下吗? (或者给我一些优秀的 javascript OOP 教程的链接)。
最佳答案
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
这里定义了 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/