2012-02-16 3 views
1

Im는 아마 여기에서 지점을 완전히 놓치기 때문에 사과한다. 하지만 '이'와 '프로토 타입'을 사용하는 것의 차이점이이 맥락에서 무엇인지 궁금해합니다. 그리고 정말해야 무엇을 ... 출력은proto와 this의 차이점은 무엇입니까?

<script type="text/javascript"> 


     var myClass = new MyClass(); 
     myClass.init(); 
     myClass.SayName(); 

    </script> 

내가 이것을 가지고

을 ...

function MyClass() { 

} 

MyClass.prototype.name = null; 

MyClass.prototype.init = function() { 

    console.log('init'); 

    MyClass.prototype.name = 'Peter set by proto'; 

    this.name = 'Peter set by this'; 

}; 

MyClass.prototype.SayName = function() { 

    console.log(MyClass.prototype.name); 
    console.log(this.name); 
}; 

그리고 페이지

.. 재사용 풍부한 클래스를 구성하는 데 사용 ...
init 
Peter set by proto 
Peter set by this 

그래서 무슨 프로토 사이의 differenve 그리고 나는 그들이 모두 기본적으로 객체/클래스에 액세스하는 생각이 ...?

답변

0

간단히 말해서, 프로토 타입의 속성은 클래스의 모든 객체에 나타나며 객체의 속성은이 객체에 속합니다.

당신은 설정 :

MyClass.prototype.name = 'Peter set by prototype'; 

당신은 CONSOLE.LOG :

console.log(new MyClass().name); 
console.log(new MyClass().name); 
.... 

그들 모두가 '프로토 타입에 의해 설정 피터'를 보여줄 것입니다.

하면 설정 한 경우 :

var myClass = new MyClass(); 
myClass.name = "Peter set by object"; 

당신은 CONSOLE.LOG :

console.log(new MyClass().name); 
console.log(myClass.name); 
.... 

보여줄 것이다 :

베드로가
베드로가 객체

가 설정 한 프로토 타입 설정
2

this을 통해 메서드 또는 속성을 클래스에 연결하면 모든 인스턴스 상속하는 자식 클래스도이 속성을 가질 수 있습니다. 반면에 prototype을 사용하면 상위 클래스에만 멤버를 추가 할 수 있지만 하위 클래스는 상속하므로 메모리을 절약 할 수 있습니다. 위의 경우

function Func(name){ 
    this.name = name; 

    this.display = function(){ 
    alert(this.name); 
    } 
} 

Func 클래스를 상속하는 모든 클래스는 당신이 다른 클래스에서 공유 할 것인지 중복도 자신의 서명에 display 방법이있을 것이다. 가장 좋은 방법은 하위 클래스에서 필요하지 않은 부모 클래스에만 해당 멤버를 추가해야합니다 (this 경유). 당신은 회원이 자식 클래스의 모든 인스턴스에 추가 공유되지 않게하려면

, prototype를 사용

function Func(name){ 
    this.name = name; 
} 

Func.prototype.display = function(){ 
    alert(this.name); 
} 

// child class calling display 
function Child(name){ 
    Func.call(this, name); // this refers to Child class here 
} 

Child.prototype = new Func(); 
var cls2 = new Child('Johnson'); 
cls2.display(); // Johnson 

바와 같이 display 방법을 볼 수 있습니다

는 자식 클래스에서 부모 Func 클래스와 사용할 수에서 비롯됩니다.

관련 문제