我有这段代码:
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 = "...";
}
并将其作为命名函数。目前,它是一个匿名函数。有没有一种方法可以创建一个命名函数呢?
答案 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
属性也是假的。