我想开始开发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给我们自己的构造函数对象.这仅适用于方法,但这不应该是一个问题,因为你真的不应该有公共字段.