我有这个基于THREE.JS的OOP方案,我需要知道我将来是否会遇到问题。
var TESTOOP = TESTOOP || { VERSION: '0.1.1' };
//______________________________________________________________________
//OBJECT ROOT CLASS
//______________________________________________________________________
TESTOOP.Object = function(miId){
//VARS________________________________
//PRIVATE
var enable = false;
//PUBLIC
this.miId = miId;
//GETTERS & SETTERS __________________
this.get_enable = function() {
return enable;
};
this.set_enable = function(val) {
enable = val;
};
this.get_miId = function() {
return this.miId;
};
this.set_miId = function(val) {
this.miId = val;
};
};
//METHODS
TESTOOP.Object.prototype = Object.create( TESTOOP.Object.prototype );
TESTOOP.Object.prototype.testNoOverwrite = function (val) {
console.log("Object.testNoOverwrite (val *4): " + val*4);
};
TESTOOP.Object.prototype.testOverwrite = function () {
console.log("Object.testOverwrite ID: " + this.miId);
};
TESTOOP.Object.prototype.testOverwriteArgs = function (val) {
console.log("Object.testOverwriteArgs (val*2): " + val*2);
};
//______________________________________________________________________
//OBJECT CLASS EXTEND & OVERWRITE METHODS
//______________________________________________________________________
TESTOOP.ObjInstance = function (miId) {
TESTOOP.Object.call(this, miId);
};
TESTOOP.ObjInstance.prototype = Object.create(TESTOOP.Object.prototype);
//REWRITE METHODS
TESTOOP.ObjInstance.prototype.testOverwrite = function () {
//SUPER
TESTOOP.Object.prototype.testOverwrite.call(this);
console.log("TESTOOP.ObjInstance.testOverwrite ID:" + this.miId);
};
TESTOOP.ObjInstance.prototype.testOverwriteArgs = function (val) {
//SUPER
TESTOOP.Object.prototype.testOverwriteArgs.call(this,val);
console.log("TESTOOP.ObjInstance.testOverwriteArgs (val*3): " + val*3);
};
//______________________________________________________________________
//INTANCE TEST
//______________________________________________________________________
var ObjInstance = new TESTOOP.ObjInstance(0.1);
ObjInstance.set_enable(true);
ObjInstance.testOverwrite();
ObjInstance.set_miId(0.2);
console.log("TESTOOP.ObjInstance, is enable: " + ObjInstance.get_enable());
ObjInstance.testOverwrite();
ObjInstance.testOverwriteArgs(1);
ObjInstance.testNoOverwrite(1);
你可以在JSbin中使用它:http://jsbin.com/apoped/1/edit
答案 0 :(得分:2)
从您的示例使用中,您似乎可以使用标准的JavaScript对象模型:
https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Details_of_the_Object_Model
这是一个有趣的读物,特别是如果您正在学习在JavaScript中使用OOP。
因此,如果您计划在JavaScript中使用OOP,我建议首先使用标准模型,使用上面的链接作为指南,以及Douglas Crockford关于该主题的文章。< / p>
如果你是一个理论家,你还可以阅读一些关于基于原型的OOP的经典文本(Henry Lieberman浮现在脑海中,而David Ungar的Organizing Programs Without Classes)。
总而言之,用道格拉斯·克罗克福德自己的话来说:
我已经写了8年的JavaScript了,我从来没有发现需要使用超级功能。超级想法在经典模式中相当重要,但在原型和功能模式中似乎是不必要的。我现在看到我早期尝试在JavaScript中支持经典模型是一个错误。
如果你真的必须使用基于类的OOP,我建议阅读John Resig的非常好的文章Simple "Class" instanciation,它给出了很好的细微之处。
然后,您可能希望使用经过验证的基于类的lib,而不是自己编写。
干杯!