用于模拟实例和静态变量的框架?

时间:2013-12-10 22:07:01

标签: javascript

我在这里有一个:

http://jsfiddle.net/s9dLb/2/

我注意到在这个框架中,所有变量都是静态的(它们在原型链上),如果你在构造函数中设置它们,它们只是“实例”。

我正在使用通常通过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);

1 个答案:

答案 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);

Fiddle