2012-01-06 2 views
2

일부 고급 JavaScript 사용자와 협력하고 코드에서 SUPER 키워드를 사용했습니다. 나는 이것이 어떻게, 왜 그리고 왜 이것을 사용할 수 있고, 사용하는지에 대해 잘 이해하지 못했다는 것을 인정한다.코드에서 SUPER를 어떻게 & 왜 사용합니까?

누군가 내게 지시하거나 사용법 및 추론에 정통한 방법을 보여줄 수 있습니까? 여기

일부 예 :

openup: function($super) { 
    $super(); 
    this.shop.enable_access(); 
} 



addLeft: function(data) { 
    var cell = Element('td'); 
    if (data.item_data) { 
     var item = new SRIL(data.item_data); 
     item.attach(cell); 
     item.show(); 
    } 

    return cell; 

}

var SRIL = Class.create(Module, { 
initialize: function($super, data) { 
    $super({ dom: 'show_line' }); 
    this.data = data; 
    if (data.Type[0] == 'Car') { 
     //some code 
    } 
    else { 
     // some code 
    } 
} 

});

+1

'슈퍼'또는 '슈퍼'를 의미합니까? 케이스 문제. –

+1

'$ super'는 일을 바꿉니다. 이것은 키워드가 아니라 변수입니다. – pimvdb

+2

이 코드는 Prototype.js 프레임 워크에 내장되어 있습니다. http://www.prototypejs.org/learn/class-inheritance –

답변

2

JavaScript에는 이러한 것이 없습니다.

업데이트 : 여기에 사용중인 라이브러리의 문서를보아야합니다. 이것은 언어 기능이 아닌 라이브러리 기능입니다.

+3

[예약 된 미래 키워드] (http : //es5.github. com/# x7.6.1.2), 그래서 "가지고있다". 비록 그것을 사용하는 구현이 있는지 모르겠다. – pimvdb

+0

JS에서 클래스를 만들고 SUPER 클래스로 상속 할 수 있습니까? 나는 그와 같은 것을 coffeescript에서 보았다고 생각하십시오. –

+0

@Alex M : JavaScript 자체가 아닌 프로토 타입으로 직접 구현하는 경우에만 가능합니다. 이 질문은 Java <-> 자바 스크립트 문제입니다. – copy

1

Javascript에는 프로토 타입/기능 모델에 따라 구조화 된 고전적인 상속이 없으므로 개발자는 클래식 모델을 다시 만들 때 다양한 시도를했습니다. super은 그러한 전략 중 하나입니다. 해결할 수있는 특정 문제는 부모 개체와 같은 메서드를 가진 자식 개체의 경우 (심지어 생성자 일지라도)입니다. 부모의 메서드에 대한 별칭으로 super을 만들지 않으면 이러한 메서드에 액세스하는 것이 다소 번거롭고 (경우에 따라 불가능할 수 있습니다.)

John Resig는 wrapper을 가지고 있습니다. 첫 번째 예제에서 _super()를 사용하여 부모 객체의 춤 메서드를 호출합니다.

+0

코드 사용법에 대한 참조 코드를 보았습니다. –

+0

이 경우, 개발자는 부모 메소드를 직접 참조하기 위해'$ super'를 사용하고있을 것입니다. 즉,'$ super'는 첫 번째 예제에서는'open_up'이라는 부모 메소드를, 두 번째 예제에서는 부모'initialize' 메소드를 가리킨다 고 가정합니다. – glortho

관련 문제