JavaScript对象中的[[Class]]属性
[[Class]] property in JavaScript objects
对象的[[Class]]
属性是根据创建对象的方式IIUC设置的。
这就是为什么一些对象以有意义的方式呈现到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:也许这是因为我对支持这种原型链初始化语法的浏览器感到困惑。
我可以修改结果对象的
[[Class]]
属性吗
好吧,这里有个诀窍。ES-6中已删除内部属性[[Class]]
。但是,从[[Class]]
中获得值的唯一方法是Object.prototype.toString.call
方法。现在,您可以自定义它来返回您想要的任何名称。引用ECMA脚本6的草案版本,
- 设标签为
Get (O, @@toStringTag)
- CCD_ 11
- 如果
Type(tag)
不是String
,则设tag
是builtinTag
- 返回字符串,该字符串是连接
"[object ", tag, and "]"
的结果
所以,如果我们能改变@@toStringTag
,我们实际上可以改变Object.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标志)。
ES6中没有[[class]],存在内部对象。
相关文章:
- 通过id和class属性获取元素
- “class”属性的值隐式扩展某些标记元素
- JavaScript对象中的[[Class]]属性
- 使用javascript bookmarklet查找和替换网页上class属性中的文本
- 将class属性设置为元素不适用于javascript和jquery
- 如何从javascript访问html的STYLE标记中的class属性
- 如何选择具有class属性的元素(使用jQuery),该属性的值正好以给定字符串开头
- 为什么要更改HTML标记的class属性
- 用ionic框架和angular js在html中动态设置class属性
- 使用class属性获取自动生成的元素的索引
- 使用jquery从祖父母中删除class属性
- 你可以设置ECMAScript对象的内部[[Class]]属性吗?
- Class属性不适用于textBoxFor
- 在javascript中通过class属性应用样式时是否有限制?
- 把ng-class属性放到angular-formly字段中
- 当元素'class属性发生变化时是否会触发事件?
- 使用jquery或javascript更改html中class属性的值
- 如何通过class属性将值传递给Angular指令
- 如何收集10个Google搜索结果链接(其中似乎删除了class属性)
- 如何检测DOM元素的class属性何时发生变化