从JavaScript对象生成对象类

时间:2015-12-14 03:10:11

标签: javascript anonymous-function

我有这段代码:

function geno(name, obj, parent) {
    parent = parent || null;
    window[name] = function() {
        if (parent){
            parent.call(this);
        }
        for (name in obj) {
            this[name] = obj[name];
        }
    }
    if (parent) {
        window[name].prototype = Object.create(parent.prototype);
    }
}

我希望能够获取此数据

{Person:{name:"Sherlock Holmes",address:"221b Baker St."}

然后把它变成班级

function Person() {
    this.name = "Sherlock Holmes";
    this.address = "...";
}

并将其作为命名函数。目前,它是一个匿名函数。有没有一种方法可以创建一个命名函数呢?

1 个答案:

答案 0 :(得分:0)

默认情况下fn.name属性不可写,但它是可配置的,所以

function geno(name, obj, parent) {
    parent = parent || null;
    var fn = window[name] = function() {
        if (parent) parent.call(this);
        for (name in obj) this[name] = obj[name];
    };

    /////////////////////////////////////////////
    // MAKE "NAME" PROPERTY WRITABLE, THEN SET IT
    Object.defineProperty(fn, "name", { writable: true });
    fn.name = name;
    /////////////////////////////////////////////

    if (parent) fn.prototype = Object.create(parent.prototype);
}

但是,这可能不适用于较旧的实现。来自MDN:

  

请注意,在非标准的ES6之前的实现中,configurable属性也是假的。