Javascript 학습노트의 대상편(3):hasOwnProperty
// 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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.