2009-10-27 9 views
1

JavaScript에 대한 실제 지식을 얻으려고합니다. 그래서 더글라스 크록 포드 (Douglas Crockford)의 "자바 스크립트 좋은 부분"이라는 책을 샀습니다.자바 스크립트 - 프로토 타입

현재 프로토 타입을 파악하는 데 어려움을 겪고 있습니다. 아래의 모든 것은 // PROTOTYPE 예제를 칠 때까지 내 브라우저에서 작동하는 것 같습니다. 누군가가 그것을 볼 수있어 왜 내가 그것에서 어떤 출력을 얻을 수 없는지. (프로토 타입 코드를 모두 주석 처리하지 않으면 내 페이지가 공백으로 표시됩니다.)

감사합니다.

베리

var stooge = { 
    "first-name": "Jerome", 
    "last-name": "Howard", 
    "nickname": "J", 
    "profession" : 'Actor' 
}; 

// below is augmenting 
var st = stooge; 
st.nickname = "curly"; 
// st.nickname and nick are the same because both are ref's to the same object 
var nick = st.nickname; 


document.writeln(stooge['first-name']); //expect Jerome -- this is "suffix" retrieval 
document.writeln(st.nickname); //expect "curly" -- this is "notation" retrieval 
document.writeln(nick); //expect "curly" 
document.writeln(stooge.profession); 


//PROTOTYPE EXAMPLE; 
if (typeof Object.create !== 'function') 
{ 
    object.create = function(o) { 
      var F = function() {}; 
      F.prototype = o; 
      return new F(); 
}; 
var another_stooge = Object.create(stooge); 
another_stooge['first-name'] = 'Barry'; 
document.writeln(another_stooge['first-name']); 
// the below should be inherited from the prototype therefore "Actor" 
document.writeln(another_stooge.profession); 

답변

5

object.create에 지정된 함수 표현식 끝에 닫는 중괄호가 누락되어 있고 Object를 대문자로 사용하지 않았습니다 (object.create = function(o) {).

//PROTOTYPE EXAMPLE; 
if (typeof Object.create !== 'function') 
{ 
    Object.create = function(o) { // <--- "Object" instead of "object" 
     var F = function() {}; 
     F.prototype = o; 
     return new F(); 
    }; 
} // <--- Closing brace was missing 
+0

Tim, 고마워요. Tim : 실례합니다. – CaRDiaK

+0

@ 퍼디난드 : 좋은 편집, 고마워. –

3

당신은 내가 아니라 function(o)를 들어, 만약 문에 대한과 var F = function() {};에 대한 닫는 중괄호를 참조 .... 라인 object.create = function(o) {에 대한 닫는 괄호를 누락 될 것으로 보인다.

누락 된 닫는 중괄호가 실제로 출력을 억제합니다. (누락 된) 닫는 중괄호가 함수 정의의 일부가되기 전에 Javascript가 모든 것을 가정하기 때문에 실제로는 실행되지 않습니다.

+0

고맙습니다. 두 가지 대답 모두 내 문제를 정확하게 해결합니다. 나는 그가 적은 점수를 가지고 있고 또한 O의 대문자를 지적했기 때문에 Tim을 답으로 표시 할 것입니다. 그러나 대단히 감사합니다. 내 이해를 도왔습니다. – CaRDiaK

관련 문제