我有這個基於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