2010-02-26 4 views
5

에서 새로운 자바 스크립트 클래스를 만드는 나는 다음과 같은 코드를 가지고 말 :동적으로 기존 개체

var album = new MyObject('album'); 

객체가 구축 될 때, 오직 앨범을 기준으로 특성의 무리가 AJAX를 통해로드되는 것을 가정한다. 난 그냥이 작업을 수행 할 수 있습니다 나중에에서되도록 Album 클래스를 만들 수 있을까 :

Album 생성자 때 자동으로로드 된 내용에 따라 앨범 객체에 고유 한 속성을 설정합니다
var anotherAlbum = new Album(); 

만들기 MyObject('album')

답변

2

다른 개체와 마찬가지로 "클래스"는 동적으로 만들 수 있습니다. 그렇습니다. 이것은 할 수 있습니다.

당신은 AJAX 응답 처리 코드에서이 같은 것을 할 것이라고합니다 (AJAX 응답이 새로운 "클래스"의 이름을 제공 한 가정을하고 newClassName라는 변수에의) :

window[newClassName] = function() { 
    // New class name constructor code 
} 

window[newClassName].prototype = { 

    someProperty: "someValue", 

    someMethod: function(a, b) { 
    }, 

    someOtherMethod: function(x) { 
    } 
} 
+0

, 어떻게하면 '앨범'객체를 생성 할 할 수있는 기존 개체에 즉석에서 새로운 기능과 속성을 추가 할 수 있습니다 그것을 할 수 있도록 신청서의 어느 시점에서라도 전화 할 수 있습니다 –

3

이것은 실제로 자바 스크립트가 가지고있는 유일한 상속을위한 것입니다. JavaScript는 prototypal inheritance (클래식 상속을 재 작성하는 데 사용할 수 있음)입니다. 즉, 상속은 클래스 정의가 아닌 다른 객체에서 가져온 것입니다.

function Album() { 
    // do whatever initialization you need to here, all the properties of album 
    // are available on 'this' 
    // e.g., 
    doSomething(this.albumName); 
} 
Album.prototype = album; 

var anotherAlbum = new Album(); 
8

자바 스크립트가 고전하지, 프로토 타입, 그래서 당신은 클래스의 관점에서 생각한다면, 당신은 잘못하고 있어요 : 다른 개체의 모든 속성을 가진 개체를 만들려면

은 간단하다.

new 연산자를 전혀 사용할 필요가 없습니다. 이 방법이있는 경우

var mySecondObject = Object.create(myObject); 

지금 당신이 mySecondObject의 속성을 변경할 수 있으며, :

var myObject = {attr1: 'val1', attr2: 'val2'}; 

그런 다음 해당 개체의 새 인스턴스를 만들 수 있습니다 : 당신은 객체 리터럴을 사용하여 새 개체를 만들 수 있습니다

mySecondObject.attr1 = "Hello"; 

mySecondObject.attr2 = function() { 
          return "World!"; 
         }; 

그리고 물론 mySecondObject 의지는 C에서 myObject을 준 모든 속성을 가지고 : 당신은 그냥 쉽게 오버로드 할 수 있습니다 reation.

이것은 간단한 버전이며 모든 속성을 '공개'로 유지한다는 점에 유의하십시오. 프라이버시가 필요하면 믹스에 몇 가지 기능을 추가하면됩니다. 그래도 조금 복잡해지기 때문에 관심이 있으시면 알려 주시기 바랍니다.

1

더글러스 크로프트의 기능 상속 패턴을 사용할 수 있습니다. 자바 코드 굿 파트 서

var mammal = function (spec) { 
    var that = {}; 

    that.get_name = function () { 
     return spec.name; 
    }; 

    that.says = function () { 
     return spec.saying || ''; 
    }; 

    return that; 
}; 

var myMammal = mammal({name: 'Herb'}); 


var cat = function (spec) { 
    spec.saying = spec.saying || 'meow'; 
    var that = mammal(spec); 
    that.purr = function (n) { 
     var i, s = ''; 
     for (i = 0; i < n; i += 1) { 
      if (s) { 
       s += '-'; 
      } 
      s += 'r'; 
     } 
     return s; 
    }; 
    that.get_name = function () { 
     return that.says() + ' ' + spec.name + 
       ' ' + that.says(); 
    return that; 
}; 

var myCat = cat({name: 'Henrietta'}); 

새로운 기능과 속성으로 기존 자바 스크립트 개체를 장식하는 기능을 사용합니다.이처럼 당신은

-1

당신은 내 주요 질문은 것이

var NewClass=function(){ 
    this.id=null; 
    this.name=null; 
    this.show=function(){ 
     alert(this.id+" "+this.name; 
    } 
} 
NewClass.prototype.clear=function(){ 
    this.id=null; 
    this.name=null; 
}; 

... 

var ins1=new NewClass(); 
var ins2=new NewClass(); 
+1

이것이 5 년 된 질문에 어떻게 대답하는지 모르겠습니다. –

관련 문제