2012-08-24 2 views
0

가능한 중복 :
JavaScript “this” keyword새 객체에 함수를 추가하여 객체를 배열에 추가합니다. 난이도 이해 '이'키워드

내가 매개 변수 이름, 성, 이메일, 전화로 추가라는 함수를 작성했습니다

. 이 새로운 함수에서 bob과 mary와 같은 새로운 연락처 객체를 만드는 것이 목적입니다.

제 질문은 this 키워드의 문맥과 사용에 관한 것입니다. this을 사용하면 새로 생성 된 객체의 속성 값을 전달되는 적절한 함수 매개 변수로 설정할 수 있습니다. this 인 경우 목적은 무엇이며 코드에서이 한 단어로 무엇을 할 수 있습니까? 여러 문자열을 함수 매개 변수로 순서대로 전달하여 여러 객체를 만들 수있는 기능을 활성화합니까?

최근에 this 키워드를 사용하여 개체별로 동일한 기능을 사용하지 않고도 여러 개체에서 동일한 기능을 사용할 수있게되었습니다. 예를 들어 개체 당 나이 변경 함수가 아닌 모든 개체의 age 속성을 설정할 수있는 함수입니다.

둘째, 연락처 배열의 적절한 위치에 데이터를 삽입하는 방식에 대한 내 이해가 올바른지 확인하고 싶습니다. 마지막으로이 키워드의 문맥을 여기에서 물어볼 수 있습니까? 내가 가장 간결한 방법으로 내 질문을 말로 표현하지 않은 경우

contacts[2] = this; 

나의 사과 :과 동일

contacts[contacts.length] = this; 

. 아래 코드를 찾으십시오. 이 코딩 상황에 대한 this 키워드의 대답이나 설명은 크게 감사 할 것입니다. 귀하의 추가 기능에

var bob = { 
    firstName: "Bob", 
    lastName: "Jones", 
    phoneNumber: "(650) 777 - 7777", 
    email: "[email protected]" 
}; 

var mary = { 
    firstName: "Mary", 
    lastName: "Johnson", 
    phoneNumber: "(650) 888 - 8888", 
    email: "[email protected]" 
}; 

var contacts = [bob, mary]; 

    function add(firstName, lastName, email, telephone){ 
    this.firstName = firstName; 
    this.lastName = lastName; 
    this.email = email; 
    this.telephone = telephone; 
    contacts[contacts.length] = this 
    } 

    var response1 = prompt("First Name?"); 
    var response2 = prompt("Last Name?"); 
    var response3 = prompt("Email?"); 
    var response4 = prompt("Telephone No.?"); 
    add(response1, response2, response3, response4); 

답변

0

this 실제로 글로벌 윈도우 객체를 참조, 그래서 당신은 추가 배열 대신 새 연락처에. - 당신이 http://bonsaiden.github.com/JavaScript-Garden/#function.this

당신이 정말로 this를 사용하려면 여기

function add(firstName, lastName, email, telephone){ 
    var newContact = { 
     firstName: firstName, 
     lastName: lastName, 
     email: email, 
     telephone: telephone 
    } 
    contacts[contacts.length] = newContact; 
} 

this에 대한 좋은 참조가 :

당신은 그 함수 내부에 새로운 객체를 생성하고 배열에 그것을 추가 할 필요가 call 또는 apply을 사용하여 this이 나타내는 내용을 지정할 수 있습니다.

add.call({}, response1, response2, response3, response4); // pass new object as this 
add.apply({}, [response1, response2, response3, response4]); // pass new object as this 
0

this은 모두 범위와 컨텍스트에 관한 것입니다. 그것은 그것이 사용되는 더 넓은 맥락을 가리킨다.

여기 일례이다 - '하여 MyObj'개체

function MyObject(one,two) { 
this.one = one; 
this.two = two; 
} 

Myobject.prototype.SayNumbers() { 
alert(this.one + this.two); 
} 

var myobj = new MyObject("Foo","Bar"); 
myobj.Saynumbers(); 

상기 실시 예의 문맥에서, this는 내에서 사용 된 함수 '속하는'.따라서 개체의 속성에 액세스하고 경고 할 수 있습니다.

this 키워드를 전역 범위에서 사용하면 (즉, 함수/개체 내부가 아닌 경우) 창 개체를 참조하게됩니다.

this도 참조로 전달할 수 있습니다. 이는 이벤트 핸들러에 유용합니다. onclick 이벤트의 경우 this을 이벤트 처리 함수로 전달하고 클릭 된 객체로 작업을 수행 할 수 있습니다.

보십시오 실험과 연구의 조금을하고 -이 사이트는 좋은 사례가 있습니다 http://www.quirksmode.org/js/this.html

0

this 키워드는 때로는 실제적인 목적을 제공 :

  • SOMETHING.add(response1, response2, response3, response4)를 들어, thisSOMETHING이 될 것입니다.

  • SOMETHING = new add(response1, response2, response3, response4)의 경우, this은 새로 생성 된 객체 SOMETHING이됩니다. 당신이 함수로이 아닌 방법으로()를 추가 호출 할 때

그러나, this 글로벌 (창) 개체입니다. 따라서 배열에 항목을 추가 할 때마다 겹쳐 쓰는 네 개의 전역 변수 (firstName, lastName, email 및 telephone)를 작성하는 것입니다. 최근 자바 스크립트 인터프리터의 옵트 인 "ES5 엄격 모드"에서 코드가 실행 된 경우 add() 함수의 첫 번째 행은 cause a runtime error이됩니다.

(당신이 읽고 더 원하는 경우, How does the "this" keyword work?를 참조하십시오.) 귀하의 경우에는

, 내가 this을 피하고 대신 명시 적으로 새로운 개체를 만드는 것입니다. contacts[contacts.length] = obj; 대해서는

function add(firstName, lastName, email, telephone){ 
    var obj = { 
     firstName: firstName, 
     lastName: lastName, 
     email: email, 
     telephone: telephone 
    }; 
    contacts[contacts.length] = obj; 
} 

는 대안 contacts.push(obj);를 사용하는 것이다. 그러나, 당신이 가지고있는 방식은 완벽하게 좋으며, 실제로, 약간 더 잘 수행 할 수도 있습니다. 원하는 것을 선택하십시오.

+0

이 답변을 통해 이해할 수있는 방식으로 표현해 주셔서 감사합니다. – user1554264

관련 문제