2013-12-08 3 views
0

임 오류오류 자바 스크립트 상속 코드를 실행하는 동안

오류 자바 스크립트 상속을 이해하기 위해이 코드를 실행하지만려고 :

SyntaxError: Using //@ to indicate source map URL pragmas is deprecated. Use //# instead 
http://code.jquery.com/jquery-1.10.1.min.js 
Line 1 
TypeError: Class.extend is not a function 
file:///home/prem/prototype/first.html 
Line 13 

HTML 파일의 코드 :

var Person = Class.extend({ 
     init: function(isDancing){ 
     this.dancing = isDancing; 
     }, 
     dance: function(){ 
     return this.dancing; 
     } 
    }); 

    var Ninja = Person.extend({ 
     init: function(){ 
     this._super(false); 
     }, 
     dance: function(){ 
     // Call the inherited version of dance() 
     return this._super(); 
     }, 
     swingSword: function(){ 
     return true; 
     } 
    }); 

    var p = new Person(true); 
    p.dance(); // => true 

    var n = new Ninja(); 
    n.dance(); // => false 
    n.swingSword(); // => true 

    // Should all be true 
    p instanceof Person && p instanceof Class && 
    n instanceof Ninja && n instanceof Person && n instanceof Class 





</script> 

</head> 
<body> 

</body> 


</html> 
에게
+0

어디에서'extend'을 정의합니까? 그건 네이티브 JavaScript가 아니기 때문에, 당신은 그 함수를 작성하거나 그렇게하는 라이브러리를 포함해야합니다. 백본'View.extend' 나 다른 프레임 워크의 상속 버전에서 코드를 모델링한다면, 그들은 특별히'extend' 메소드를 추가합니다. JavaScript에서 상속이 작동하는 방식이 아닙니다. – meagar

+0

그럼, 뭐가 궁금한가요? 오류가 명확하지 않습니까? 상속을 이해하도록 상속을 설정하는 데 도움이되는 라이브러리는 사용하지 않을 것입니다. –

+0

@Felix :이 오류를 어떻게 수정합니까? – user1050619

답변

1

자바 스크립트 inherita nce는 프로토 타입 기반 언어이기 때문에 사용할 수있는 다른 OOP 언어처럼 작동하지 않습니다. MDN에는 Java 또는 C++과 다른 이유에 대한 멋진 소개가 있습니다.

당신의 혼란은 js 자체가 다른 객체의 디자인에 기반 할 때 '확장'이라는 키워드를 사용하지 않는다는 사실에 근거한다고 생각합니다. 그러나, 디자인 패턴을 모방하고 대부분 '익숙한'용어 인 '확장'을 빌려 쓰는 몇 개의 js 라이브러리가 있습니다.

오류 : Class.extend is not a function : 'class'는 기술적으로 js의 예약어이지만, 현재까지 아무 것도하지 않는다고 생각합니다. 그래서 당신이나 다른 누군가가 'Class'라는 객체를 선언하지 않고 'extends'라는 함수 인 속성을 부여하지 않으면 js 엔진은 호출하려고 할 때 무엇을해야할지 모릅니다.

+0

참고로, ES6에서는 class 정의와 상속을위한 새로운 구문을 소개합니다.이 클래스는 class 키워드를 사용합니다. http : //wiki.ecmascript .org/doku.php? id = harmony : 클래스. –

+0

@FelixKling 좋은 전화, 나는 그것이 ES6에 대한 제안에 있다는 것을 알고 있었다. 나는 대답하는 동안 그것이 인라인에 너무 많이 있다고 느꼈다. "나는 그것이 현재까지 아무 것도하지 않는다고 생각한다"는 비트는 js 엔진의 현재 구현에 대한 지식 부족에 대한 것입니다. –

+0

나는 본다. 내가 알았는지 모르겠다. 그럼에도 불구하고 나는 단지 다음과 같이 해설했다 :) 해피 코딩! –