Symbol.unscopables 屬性

admin發表於2017-04-24

物件的Symbol.unscopables屬性,指向一個物件。

該物件指定了使用with關鍵字時,哪些屬性會被with環境排除。

更多關於Symbol的內容可以參閱JavaScript Symbol一章節。

程式碼例項如下:

[JavaScript] 純文字檢視 複製程式碼
Array.prototype[Symbol.unscopables]
// {
// copyWithin: true,
// entries: true,
// fill: true,
// find: true,
// findIndex: true,
// keys: true
// }
Object.keys(Array.prototype[Symbol.unscopables])
// ['copyWithin', 'entries', 'fill', 'find', 'findIndex', 'keys']

上面程式碼說明,陣列有 6 個屬性,會被 with 命令排除。

[JavaScript] 純文字檢視 複製程式碼
//沒有 unscopables 時
class MyClass {
  foo() { return 1; }
}
var foo = function () { return 2; };
with (MyClass.prototype) {
  foo(); // 1
}
//有 unscopables 時
class MyClass {
  foo() { return 1; }
  get [Symbol.unscopables]() {
    return { foo: true };
  }
}
var foo = function () { return 2; };
with (MyClass.prototype) {
  foo(); // 2
}