익명 객체에 메소드가 있는지 확인하는 방법은?
다음과 같이 생성된 익명 개체를 확인하려면 어떻게 해야 합니까?
var myObj = {
prop1: 'no',
prop2: function () { return false; }
}
정말로 prop2가 정의되어 있습니까?
prop2
항상 함수로 정의되지만 일부 개체의 경우 필요하지 않으며 정의되지 않습니다.
여기서 제안된 것을 시도해 봤습니다.네이티브 자바스크립트 개체에 속성/메소드가 있는지 확인하는 방법? 하지만 익명 개체에는 작동하지 않는 것 같습니다.
typeof myObj.prop2 === 'function';
함수가 정의되었는지 여부를 알 수 있습니다.
if(typeof myObj.prop2 === 'function') {
alert("It's a function");
} else if (typeof myObj.prop2 === 'undefined') {
alert("It's undefined");
} else {
alert("It's neither undefined nor a function. It's a " + typeof myObj.prop2);
}
너는 원한다hasOwnProperty()
:
var myObj1 = {
prop1: 'no',
prop2: function () { return false; }
}
var myObj2 = {
prop1: 'no'
}
console.log(myObj1.hasOwnProperty('prop2')); // returns true
console.log(myObj2.hasOwnProperty('prop2')); // returns false
참조: Mozilla, Microsoft, phrogz.net .
3가지 옵션
typeof myObj.prop2 === 'function'
속성 이름이 동적/생성되지 않은 경우myObj.hasOwnProperty('prop2')
속성 이름이 동적이고 직접 속성인지만 확인합니다(프로토타입 체인 아래가 아님).'prop2' in myObj
속성 이름이 동적인 경우 프로토타입 체인을 확인합니다.
익명의 물건이라뇨?myObj
개체 리터럴을 변수에 할당했으므로 익명이 아닙니다.테스트해 볼 수 있습니다.
if (typeof myObj.prop2 === 'function')
{
// do whatever
}
이것이 오래된 질문이라는 것을 알고 있지만, OP가 존재 여부만 확인하고자 할 때 모든 답변이 방법이 존재하고 기능임을 보장한다는 것이 놀랍습니다.함수임을 알기 위해서는 다음을 사용할 수 있습니다.
typeof myObj.prop2 === 'function'
그러나 다음을 조건으로 사용할 수도 있습니다.
typeof myObj.prop2
또는 다음과 같습니다.
myObj.prop2
이것은 함수가 다음을 평가하기 때문입니다.true
그리고.undefined
에 평가합니다.false
. 따라서 구성원이 존재하는 경우 함수만 사용할 수 있음을 알고 있다면 다음을 사용할 수 있습니다.
if(myObj.prop2) {
<we have prop2>
}
또는 식으로:
myObj.prop2 ? <exists computation> : <no prop2 computation>
그것을 하는 한가지 방법은.if (typeof myObj.prop1 != "undefined") {...}
Object.prototype.hasOwnProperty.call(obj, 메서드)을 사용하는 것이 좋습니다.
ECMAscript 5.1에서는 Object.create가 추가되어 지정된 [Prototype]으로 개체를 생성할 수 있게 되었습니다.Object.create(null)는 맵으로 사용할 개체를 만드는 데 사용되는 일반적인 패턴입니다.개체가 Object.prototype 속성을 갖는 것으로 가정하면 오류가 발생할 수 있습니다.이 규칙을 사용하면 개체에서 직접 Object.prototype 메서드를 호출할 수 없습니다.
또한 개체에는 Object.prototype에 내장된 속성이 표시되어 의도하지 않은 동작이나 서비스 거부 보안 취약성이 발생할 수 있습니다.예를 들어, 악의적인 클라이언트가 {"hasOwnProperty": 1}과 같은 JSON 값을 전송하여 서버를 중단시킬 수 있으므로 웹 서버에서 클라이언트의 JSON 입력을 구문 분석하고 hasOwnProperty를 직접 호출하는 것은 안전하지 않습니다.
이와 같은 미묘한 버그를 방지하려면 항상 Object.prototype에서 이러한 메서드를 호출하는 것이 좋습니다.예를 들어 foo.hasOwnProperty("bar")는 Object.prototype.hasOwnProperty.call(foo, "bar")로 대체해야 합니다.
const myObj = {
prop1: 'no',
prop2: function () { return false }
}
console.log(Object.prototype.hasOwnProperty.call(myObj, 'prop2'))
console.log(Object.prototype.hasOwnProperty.call(myObj, 'prop3'))
언급URL : https://stackoverflow.com/questions/3007460/how-to-check-if-anonymous-object-has-a-method
'programing' 카테고리의 다른 글
편집 후 작성자 목록 변경을 위한 WordPress Filter(워드프레스 필터) 작성자 상자 (0) | 2023.09.13 |
---|---|
TextInputLayout의 부동 레이블 색상을 변경하는 방법 (0) | 2023.09.08 |
rc-X 양식의 버전 문자열 순서에 따라 git 태그를 정렬하는 방법Y.Z.W? (0) | 2023.09.08 |
다양한 제품 맛에 대해 서로 다른 의존성을 정의하는 방법 (0) | 2023.09.08 |
메뉴 항목을 작업 표시줄에 숨기려면 어떻게 해야 합니까? (0) | 2023.09.08 |