IT박스

익명 객체에 메소드가 있는지 확인하는 방법?

itboxs 2020. 6. 27. 11:47
반응형

익명 객체에 메소드가 있는지 확인하는 방법?


익명 개체가 생성되었는지 어떻게 확인할 수 있습니까?

var myObj = { 
    prop1: 'no',
    prop2: function () { return false; }
}

실제로 prop2가 정의되어 있습니까?

prop2 항상 함수로 정의되지만 일부 객체의 경우 필요하지 않으며 정의되지 않습니다.

여기에 제안 된 것을 시도했습니다. 기본 JavaScript 객체에 속성 / 메소드가 있는지 확인하는 방법은 무엇입니까? 그러나 나는 그것이 익명의 객체에 대해서는 효과가 없다고 생각합니다.


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 옵션

  1. typeof myObj.prop2 === 'function' 속성 이름이 동적 / 생성되지 않은 경우
  2. myObj.hasOwnProperty('prop2') 속성 이름이 동적이고 직접 속성인지 확인 (프로토 타입 체인이 아님)
  3. 'prop2' in myObj 속성 이름이 동적 인 경우 프로토 타입 체인을 확인하십시오.

"익명 개체"란 무엇을 의미합니까? myObj변수에 객체 리터럴을 할당했기 때문에 익명이 아닙니다. 당신은 이것을 테스트 할 수 있습니다 :

if (typeof myObj.prop2 === 'function')
{
    // do whatever
}

그것을하는 한 가지 방법은 if (typeof myObj.prop1 != "undefined") {...}


나는 이것이 오래된 질문이라는 것을 알고 있지만 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>

참고 URL : https://stackoverflow.com/questions/3007460/how-to-check-if-anonymous-object-has-a-method

반응형