JavaScript对象中的[[Class]]属性
对象的JavaScript对象中的[[Class]]属性,javascript,ecmascript-6,ecmascript-harmony,Javascript,Ecmascript 6,Ecmascript Harmony,对象的[[Class]]属性是根据创建对象的方式设置的 这就是为什么一些对象以一种有意义的方式呈现到Chrome控制台,例如MyFoo,而其他对象则简单地呈现为Object 使用ES6中的新对象文字语法来配置原型链。我是否可以修改结果对象的[[Class]]属性,以便以更有意义的方式呈现给控制台 var x = { __proto__: MyCtor.prototype }; console.log(x); // I want something like MyCtor to be logged
[[Class]]
属性是根据创建对象的方式设置的
这就是为什么一些对象以一种有意义的方式呈现到Chrome控制台,例如MyFoo
,而其他对象则简单地呈现为Object
使用ES6中的新对象文字语法来配置原型链。我是否可以修改结果对象的[[Class]]
属性,以便以更有意义的方式呈现给控制台
var x = { __proto__: MyCtor.prototype };
console.log(x); // I want something like MyCtor to be logged to the console
我注意到,在Mac上的Safari 8中,上面将MyCtor
呈现到控制台。Mac电脑上的Chrome没有
PS:这可能是因为我对支持这个原型链初始化语法的浏览器感到困惑。在ES6中没有[[Class]],有。在ES6中没有[[Class]],有 我可以修改结果对象的
[[Class]]
属性吗
嗯,这里有个窍门。ES-6中已删除内部属性[[Class]]
。但是,从[[Class]]
获取值的唯一方法是Object.prototype.toString.call
方法。现在,您可以自定义它以返回您想要的任何名称。引用
Get(O,@@toStringTag)
ReturnIfAbrupt(标签)
类型(标记)
不是字符串
,则让标记
成为内置标记
“[object”、标记和“]”的结果字符串。
@@toStringTag
,我们实际上可以更改对象.prototype.toString.call
的结果。我们这样改变它
var obj = {};
Object.defineProperty(obj, Symbol.toStringTag, {
get: function() {
return "MyClass";
}
});
console.log(Object.prototype.toString.call(obj));
# [object MyClass]
注意:上述程序在iojs中测试(v1.0.2,启用了--harmony标志)
我可以修改结果对象的[[Class]]
属性吗
嗯,这里有个窍门。ES-6中已删除内部属性[[Class]]
。但是,从[[Class]]
获取值的唯一方法是Object.prototype.toString.call
方法。现在,您可以自定义它以返回您想要的任何名称。引用
Get(O,@@toStringTag)
ReturnIfAbrupt(标签)
类型(标记)
不是字符串
,则让标记
成为内置标记
“[object”、标记和“]”的结果字符串。
@@toStringTag
,我们实际上可以更改对象.prototype.toString.call
的结果。我们这样改变它
var obj = {};
Object.defineProperty(obj, Symbol.toStringTag, {
get: function() {
return "MyClass";
}
});
console.log(Object.prototype.toString.call(obj));
# [object MyClass]
注意:上面看到的程序在iojs中测试(v1.0.2,启用了和谐标志)。ES6 afaik中没有
[[Class]]
。@elclanrs好的,谢谢你回答这个问题,我会接受。不,恐怕[[Class]
从未影响控制台。log
显示对象。没有[[Class]]
在ES6 afaik中。@elclars好的,谢谢你回答这个问题,我会接受。不,afaik[[Class]]
从未影响控制台.log
显示对象的方式。通过计算属性,这甚至可以简化为var obj={[Symbol.toStringTag]:“MyClass”}使用计算属性,这甚至可以简化为var obj={[Symbol.toStringTag]:“MyClass”}代码>。