JavaScript의 hasOwnProperty


79

중히 여기다:

function Shape() {
    this.name = "Generic";
    this.draw = function() {
        return "Drawing " + this.name + " Shape";
    };
}

function welcomeMessage()
{
    var shape1 = new Shape();
    //alert(shape1.draw());
    alert(shape1.hasOwnProperty(name));  // This is returning false
}

.welcomeMessage 에 호출 body.onload이벤트 .

기대했다 shape1.hasOwnProperty(name)true를 반환 했지만 false를 반환합니다.

올바른 행동은 무엇입니까?


5
그렇게 문자열을 필요로 "name"반대name
AO_

답변:


157

hasOwnProperty 문자열 인수를받는 일반 JavaScript 함수입니다.

당신이 호출 할 때 shape1.hasOwnProperty(name)당신이 그것을의 값을 전달하는 name그냥 당신이 쓴 경우와 마찬가지로, (존재하지 않는) 변수를 alert(name).

당신은 호출 할 필요가 hasOwnProperty포함 된 문자열을 name다음과 같이 : shape1.hasOwnProperty("name").


1
hasOwnProperty ()를 추가하는 것을 잊지 마세요. 지정된 속성 (이 경우 이름)이 존재하는지 여부를 나타내는 부울 값을 반환합니다
maheshmnj


3

이 시도:

함수 welcomeMessage ()
{
    var shape1 = new Shape ();
    // alert (shape1.draw ());
    alert (shape1.hasOwnProperty ( "name"));
}

JavaScript에서 리플렉션으로 작업 할 때 멤버 개체는 항상 이름으로 문자열로 참조됩니다. 예를 들면 :

for(i in obj) { ... }

루프 반복기 i는 속성 이름과 함께 문자열 값을 보유합니다. 코드에서이를 사용하려면 다음과 같은 배열 연산자를 사용하여 속성을 처리해야합니다.

 for (i in obj) {
   alert ( "obj의 값."+ i + "="+ obj [i]);
 }

2

hasOwnProperty () 는 객체 키의 유효성을 검사하는 좋은 속성입니다. 예:

var obj = {a:1, b:2};

obj.hasOwnProperty('a') // true

Re "좋은 재산" : 기능이 아닌가요?
Peter Mortensen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.