我实际上是在玩Javascript做一个小游戏,我想实现在http://www.crockford.com/javascript/inheritance.html上发现的内容,该内容类似于:
ZParenizor.method('toString', function () {
if (this.getValue()) {
return this.uber('toString');
}
return "-0-";
});
我找不到用于使这种开发成为可能的库的任何参考。有任何想法吗?否则,我正在寻找一个好的库来帮助我的OOP开发。
谢谢
编辑:
我正在寻找Node.js的OOP解决方案/库。请注意,我是Node.js的新手
也许您确实需要一个库,ES5就像地狱一样冗长,所以我创建了pd
我正在寻找Node.js的OOP解决方案/库。
你 并不 需要一个库。您有 ES5 。
JavaScript没有经典的OOP。它具有原型OOP。
这意味着您只有对象。您只能对对象进行扩展,操作和克隆。
操作
var o = {};
o.foo = "bar";
延伸
var o = someObject;
Object.defineProperties(o, {
"foo": { value: "foo" },
"bar": { value: "bar" }
"method": { value: function () { } }
}
克隆
var o = someObject;
var p = Object.create(o);
克隆并扩展
var o = someObject;
var p = Object.create(o, {
"foo": { value: "foo" },
"bar": { value: "bar" }
"method": { value: function () { } }
}
要了解这一点很重要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;
免责声明: .__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 }
})
};
这是我正在处理的一些代码的片段,您可以将其用作示例:
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();
};
问题内容: 在过去的两年中,我一直在编写Java,现在,我开始用python(另外)进行编写。 问题是,当我查看我的Python代码时,似乎有人试图将Java代码转换为python格式,但结果却很糟糕,因为- python不是Java。 关于如何摆脱“用Python编写Java”模式的任何技巧? 谢谢! 问题答案: 您可能会考虑将自己沉浸在Python范例中。最好的方法是首先了解他们的知识,然后通
问题内容: 我正在和朋友一起在网上商店工作。他使用PHP为我设置了一个Cookie,并在购物车中添加了一定数量的产品。cookie称为“购物车”,带有产品数量的变量称为“ items”。 而且,我必须阅读cookie并使用javascript获取“购物车”的值并将其打印在HTML文档中,但是我不知道如何使用它,请您能帮我吗?我以前从未使用过Cookie或JSON,但我认为应该使用JSON完成,您能
问题内容: 我很好奇嵌套函数的node.js模式如何与v8的垃圾收集器一起工作。这是一个简单的例子 如果restofprogram是长时间运行的,那是否不意味着str将永远不会被垃圾回收?我的理解是,使用结点,您最终会获得很多嵌套函数。如果在外部声明了restofprogram,是否会收集垃圾,因此str不能在范围内?这是推荐做法吗? 编辑 我不想使问题复杂化。那只是粗心,所以我修改了它。 问题答
问题内容: 我正在尝试从网上获取图片并使用base64对其进行编码。 到目前为止,我基本上是: 这似乎非常接近解决方案,但我不能完全解决它。它识别数据类型并给出输出: 但是,缓冲区列表“ bl”似乎为空。 提前致谢! 问题答案: BufferList已过时,因为它的功能现在在Node核心中。唯一棘手的部分是将请求设置为不使用任何编码:
问题内容: 我是Node.js的新手,已经提出了使用Node.js开发基于富Web的应用程序的要求。 现在,我正在研究node.js的入门指南。我有机会在这里查看页面,并对数百个框架感到困惑。我不知道如何选择合适的框架,因此需要帮助以做出完美的决定。让我解释一下我的要求。 想要为所有功能开发RESTfull API。(是否有OAuth图书馆?) 想要在API之上开发Web应用程序。必须以某种方式设
错误 我正在编译SimpleCompiletest.java并得到这个错误。救命啊!!!