hug*_*omg 5 javascript eval prototypal-inheritance
如果我使用“传统”Javascript 类创建 Foo 类,则在控制台上打印 Foo 实例时,chrome 和 Firefox 都会显示 Foo 名称:
function Foo(){
this.x = 10;
}
console.log(new Foo());
// Foo {x: 10}
Run Code Online (Sandbox Code Playgroud)
另一方面,如果我使用手工滚动原型继承,那么在调试时我不会得到有用的名称
function mkClass(init, proto){
return function(/**/){
var obj = Object.create(proto);
init.apply(obj, arguments);
return obj;
}
}
var Bar = mkClass(function(){ this.x = 10 }, {});
console.log(Bar());
// Object {x: 10}
Run Code Online (Sandbox Code Playgroud)
有没有办法让通过我的原型系统创建的类在控制台上打印时显示它们的名称?到目前为止,我能想到的唯一方法是一个丑陋的黑客滥用 eval 为 mkClass 返回的当前匿名构造函数提供不同的名称。
看来 FF 和 chrome 只是打印constructor property。尝试将其设置为有意义的内容,您应该会看到结果。
function mkClass(init, proto){
proto.constructor = {name: "Foo"};
return function(/**/){
var obj = Object.create(proto);
init.apply(obj, arguments);
return obj;
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1449 次 |
最近记录: |