Javascript 학습노트의 대상편(3):hasOwnProperty

2558 단어

// Poisoning Object.prototype
Object.prototype.bar = 1;
var foo = {goo: undefined};

foo.bar; // 1
'bar' in foo; // true

foo.hasOwnProperty('bar'); // false
foo.hasOwnProperty('goo'); // true

여기서hasOwnProperty만 정답을 줄 수 있습니다. 이것은 한 대상의 속성을 훑어볼 때 매우 필요합니다.Javascript에서는 객체 자체에 정의된 속성인지 원형 체인에서 상속된 속성인지 판단하는 다른 방법이 없습니다.
hasOwnProperty를 속성으로
자바스크립트는hasOwnProperty를 민감한 단어로 설정하지 않았습니다. 이것은hasOwnProperty라는 속성을 가질 수 있음을 의미합니다.이 때 당신은 그 자체의hasOwnProperty 방법을 사용하여 속성을 판단할 수 없기 때문에 외부의hasOwnProperty 방법을 사용하여 판단해야 합니다.

var foo = {
 hasOwnProperty: function() {
 return false;
 },
 bar: 'Here be dragons'
};

foo.hasOwnProperty('bar'); // always returns false

// Use another Object's hasOwnProperty and call it with 'this' set to foo
({}).hasOwnProperty.call(foo, 'bar'); // true

// It's also possible to use hasOwnProperty from the Object
// prototype for this purpose
Object.prototype.hasOwnProperty.call(foo, 'bar'); // true

총결산
객체 속성의 존재를 판단할 때hasOwnProperty는 유일하게 의존할 수 있는 방법입니다.여기에 for in loop을 사용하여 대상을 훑어볼 때hasOwn Property를 사용하면 원형 대상의 확장으로 인한 어려움을 잘 피할 수 있음을 일깨워 준다.
다음은 다른 네티즌들의 보충이다.
Javascript에서 Object 대상의 원형에 있는hasOwnProperty () 는 원형 체인을 계승하지 않고 대상 자체에 정의된 속성을 판단합니다.
obj.hasOwnProperty(prop)
매개 변수prop
감지할 속성 문자열 이름 또는 Symbol(ES6)

o = new Object();
o.prop = 'exists';
o.hasOwnProperty('prop');       //   true
o.hasOwnProperty('toString');     //   false
o.hasOwnProperty('hasOwnProperty');  //   false

hasOwnProperty를 객체의 속성 이름으로 사용
자바스크립트가hasOwnProperty를 민감한 단어로 삼지 않았기 때문에 우리는 대상의 한 속성을hasOwnProperty라고 명명할 가능성이 높다. 그러면 대상의 원형인hasOwnProperty 방법을 사용하여 속성이 원형 체인에서 왔는지 판단할 수 없다.

var foo = {
  hasOwnProperty: function() {
    return false;
  },
  bar: 'Here be dragons'
};

foo.hasOwnProperty('bar'); //   false

이 대상을 사용할 수 없습니다.hasOwnProperty 이런 방법은 어떻게 이 문제를 해결합니까?원형 체인의 진정한 hasOwnProperty 방법을 사용해야 합니다.

({}).hasOwnProperty.call(foo, 'bar'); // true
//  :
Object.prototype.hasOwnProperty.call(foo, 'bar'); // true

참조:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty

좋은 웹페이지 즐겨찾기