我实际上正在玩Javascript做一个小游戏,我想实现我在http://www.crockford.com/javascript/inheritance.html上找到的类似于:
ZParenizor.method('toString', function () {
if (this.getValue()) {
return this.uber('toString');
}
return "-0-";
});
Run Code Online (Sandbox Code Playgroud)
我找不到任何用于使这种开发成为可能的库的参考.有任何想法吗?否则,我正在寻找一个有助于我的OOP发展的好图书馆.
谢谢
编辑:
我正在寻找Node.js的OOP解决方案/库.请注意,我是Node.js的新手
Ray*_*nos 77
也许你确实需要一个库,ES5很详细,所以我创建了pd
我正在寻找Node.js的OOP解决方案/库.
你并不需要一个库.你有ES5.
JavaScript没有经典的OOP.它有原型OOP.
这意味着您只有对象.你可以用对象做的唯一事情就是扩展,操作和克隆它们.
操纵
var o = {};
o.foo = "bar";
Run Code Online (Sandbox Code Playgroud)
延伸
var o = someObject;
Object.defineProperties(o, {
"foo": { value: "foo" },
"bar": { value: "bar" }
"method": { value: function () { } }
}
Run Code Online (Sandbox Code Playgroud)
克隆
var o = someObject;
var p = Object.create(o);
Run Code Online (Sandbox Code Playgroud)
克隆并扩展
var o = someObject;
var p = Object.create(o, {
"foo": { value: "foo" },
"bar": { value: "bar" }
"method": { value: function () { } }
}
Run Code Online (Sandbox Code Playgroud)
要了解这一点很重要Object.create,Object.defineProperty和Object.defineProperties工作.
克隆操作实际上并不是克隆.它正在从蓝图中创建一个新对象.蓝图是一个对象.它把蓝图放在了[[Prototype]].我将用于演示[[Prototype]]的.__proto__财产中的生命.
var o = {};
var p = Object.create(o);
p.__proto__ === o; // true
var q = Object.create(p);
q.__proto__.__proto__ === o;
var r = Object.create(q);
r.__proto__.__proto__.__proto__ === o;
Run Code Online (Sandbox Code Playgroud)
免责声明: .__proto__已弃用.不要在代码中使用它.它有它用于调试和健全性检查.
这里主要的一点是,从访问属性o中r它必须走3级了原型链,这变得昂贵.要解决这个问题,而不是克隆随机对象,你应该克隆特定的蓝图(每个对象应该有一个蓝图).
// Parent blueprint
var Parent = (function _Parent() {
// create blank object
var self = Object.create({});
// object logic
return self;
}());
// factory function
var createParent = function _createParent(foo) {
// create a object with a Parent prototype
return Object.create(Parent, {
foo: { value: foo }
});
}
var Child = (function _Child() {
var self = Object.create(Parent);
// other stuff
return self;
}());
var createChild = function _createChild(bar) {
return Object.create(Child, {
bar: { value: bar }
})
};
Run Code Online (Sandbox Code Playgroud)
这是我正在处理的一些代码的片段,您可以使用它作为示例:
var Sketchpad = (function _SketchPad() {
var self = Object.create({});
var mousemove = function _mousemove(e) {
this.drawLine(e);
};
self._init = function _init() {
this.$elem.bind({
"mousemove": mousemove.bind(this),
});
this.pens = {};
$("#clear").bind("click", this.clear.bind(this));
$("#undo").bind("click", (function _undoPath() {
this.pen.undo();
}).bind(this));
return this;
};
self.clear = function() {
this.paper.clear();
};
return self;
}());
createSketch = function _createSketchPad(id, w, h) {
var paper = Raphael(id, w, h);
var pen = createPen(paper);
var o = Object.create(Sketchpad, {
paper: { value: paper },
$elem: { value: $("#" + id) },
pen: {
get: function() { return pen; },
set: function(v) { pen = v; }
}
});
return o._init();
};
Run Code Online (Sandbox Code Playgroud)
MooTools是OOP Javascript方面最好的库之一.
您可以创建类,接口,使用继承等.
文档 http://mootools.net/docs/core
教程 - MooTools OOP http://www.phpeveryday.com/articles/MooTools-Basic-Creating-Classes-MooTools-P919.html
| 归档时间: |
|
| 查看次数: |
19739 次 |
| 最近记录: |