我有这个基于THREE.JS的OOP方案,我需要知道在未来的工作中是否会遇到问题。这是JS中面向对象的一个很好的例子吗?
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
是的,你会遇到问题。所有开发人员都有自己的代码问题。我们应该预测什么才能回答你的问题? – 2013-02-22 16:53:53
我想知道是否有更好的选择来构建JS中的OOP,或者如果这个解决方案运行良好。 – karacas 2013-02-22 17:21:24
这是JavaScript中的一个非常标准的模式。唯一不同的是你的构造函数位于'TESTOOP'命名空间。有许多关于不同模式的讨论。如果您想了解更多信息,我建议您搜索一下。但是对于人们提出的所有“聪明”方法,我个人认为你展示的基本模式是最好的。 – 2013-02-22 17:25:16