当它说"for..in迭代一个对象的可枚举属性时,我被引导到MDN for..in页面."
然后我进入了属性页的Enumerability和owner,它说"可枚举的属性是那些可以通过for..in循环迭代的属性".
字典将可枚举定义为可数,但我无法真实地想象这意味着什么.我可以得到一些可枚举的例子吗?
我正在尝试更多地学习ECMAScript 6和继承.
问题:当我控制台注销时bob,daisy它们不同.bob 记录下一个原型__proto__并显示他的构造函数run:true;.然而,在ES6实现daisy上没有__proto__,它仍然可以isRunning访问.为什么?
var Man = (function(){
"use strict";
function Man() {
this.run = true
}
Man.prototype.isRunning = function() {
console.log('yesss imma run');
};
return Man;
})();
var bob = new Man();
console.log(bob);
class Woman {
constructor(){
this.run = true;
}
isRunning() {
console.log('yess imma run');
}
}
var daisy = new Woman();
console.log(daisy);
Run Code Online (Sandbox Code Playgroud) javascript prototype object google-chrome-devtools ecmascript-6
我知道五年前这是一个有争议的问题,但我想知道今天的JavaScript是否有所改变.是否有任何现实世界的主要现代图书馆与扩展不兼容的例子Object.prototype?
我对假设"有人可能会for in在您想要使用的库中编写错误的迭代代码感兴趣,可能在将来,然后您可能会得到一个奇怪的错误"
试图理解为什么使用"for ... in"方法无法找到Javascript Error对象的两个跨浏览器属性,即"name"和"message"
// error code
...
}catch( err ){
// in FF this lists 3 properties for fileName, lineNumber and columnNumber...
// but NOT name or message!
for(var propertyName in err) {
$( '#diags' ).append( 'err property: ' + propertyName + ',
value: ' + err[ propertyName ] + '<br>' );
}
// this line prints fine:
$( '#diags' ).append( 'Error - name:' + err.name + ', message: ' + err.message + '<br>' );
}
Run Code Online (Sandbox Code Playgroud)
编辑
我被问到名称和信息是什么.这些性质(是他们有关系吗?),这所有的错误在任何浏览器...所以在上面的代码中,我添加了一个额外的代码行这表明这些"属性"或不管他们是印刷精美
EDIT2 …