我在这里有一个:
我注意到在这个框架中,所有变量都是静态的(它们在原型链上),如果你在构造函数中设置它们,它们只是“实例”。
我正在使用通常通过Java教授的CS101中的这些术语。
有更好的方法吗?
默认情况下,我将实例变量设置为字符串'instance',一旦调用构造函数,它将被替换。
var klass = function (obj, config_module) {
if (config_module === 'constructor') {
var object_public;
if (obj.constructor) {
object_public = obj.constructor;
delete obj.constructor;
}
_.some(obj, function (val, key) {
object_public.prototype[key] = val;
});
return object_public;
}
};
var Test = klass({
// instance, set in constructor
A : 'instance',
// static, not set in constructor
B : 4,
constructor: function (some_var) {
this.A = some_var;
},
get: function () {
return 2;
},
set: function () {
}
}, 'constructor');
var instanceA = new Test('A');
var instanceB = new Test('B');
console.log('Start');
console.log(instanceA.A);
console.log(instanceB.A);
答案 0 :(得分:1)
尝试MooTools。它可以在不使用编译为JavaScript的其他语言(如CoffeScript或TypeScript)的情况下尽可能接近。
以下是MooTools类的示例:
Foo = new Class({
// instance variable:
name: '',
// construtor:
initialize: function(name) {
this._setName(name);
},
// instance method:
getName: function(){
return this.name;
},
// protected instance method:
_setName: function(name) {
this.name = name;
}.protect()
});
// static variable:
Foo.bar = 'bar';
// static method
Foo.bar = function(){}
// instance object:
var myFoo = new Foo('my new name');
var theName = myFoo.getName();
var checkInstance = instanceOf(myFoo, Foo);