2013-04-14 3 views
0

저는 종종 5 + 변수로 초기화해야하는 자바 스크립트 객체를 가지고 있습니다. 객체가 생성 될 때마다 new Person 객체가 생성 될 때마다 각 변수에 대한 setter를 사용하지 않는 것이 좋습니다. 아마 생성자일까요? 어떻게 모듈 객체에 생성자를 넣을 수 있습니까? 내가 자바 스크립트에서 생성자를 작성하는 방법의 예를 발견했지만이 객체가 어떻게 디자인되어 있는지 잘 모르겠다. Constructors in JavaScript objects생성자가있는 자바 스크립트 모듈

나는 각 변수를 설정할 수있는 Person을 초기화 할 수 있기를 바란다. 사람의 음부 :

var p = new Person(a, b, c, d, e); 

내 객체 : 이것처럼

var Person = (function() { 

    // private 

    var name; 
    var gender; 
    var weight; 
    var location; 

    return { 
     // public 
     myfunc: function() { 

     } 
    } 

})(); 
+0

제거'()'마지막 – Esailija

답변

2

:

function Person(a,b,c,d,e) { 
    this.name = a; 
    this.gender = b; 
    this.weight = c; 
    this.location = d 
    this.whatever = e; 

} 
Person.prototype.myName = function() { return this.name; } 
Person.prototype.myGender = function() { return this.gender; } 


var p = new Person("John", "male", 180, "USA", "Something"); 
p.myName(); 
p.myGender(); 

이것은 JS의 내부 객체 & 상속 모델을 사용하므로 개별 객체의 고유 변수를 설정하고 in-comman 함수 및 메소드는 한 번만 지정/생성되며 "Person"객체의 모든 인스턴스는 이들을 사용합니다.

+0

에서 나는 영업 이익은 그냥 참고로 등 this.name''에 직접 액세스, –

1
var Person = function(name) { 
    var gender = "male"; 

    this.changeName = function(newName) { 
     name = newName; 
    }; 

    this.displayName = function() { 
     return "<p>" + name + "</p>"; 
    }; 

    this.displayGender = function() { 
     return "<p>" + gender + "</p>"; 
    }; 
} 

var bart = new Person("Bart"); 
document.body.innerHTML = bart.displayGender(); 

이 솔루션은 "폐쇄"상속 모델 (http://javascript.crockford.com/private.html)에 프로토 타입 상속 모델에 대한

, SReject의 솔루션을 참조 기반으로합니다. 진정한 사적인 멤버는 허용되지 않습니다.

+0

을 방지하고 싶었 생각이없는 따옴표는 근처에있다 이름 9 행의 변수. – orb

+0

고마워, 해결 했어. – Bart

1

이 패턴은 캡슐화 된 데이터 (숨겨진 필드)을 제공하고 당신에게 그들이 공개적으로 액세스하는 방법을 통해 쉽게 제어 줄 것이다 :이 당신을 위해 무엇을 찾고있는 희망

var PersonFactory = {  
    create: function (nm, gn, wt, loc) { 
     var name = nm, 
      gender = gn, 
      weight = wt, 
      location = loc; 

     return function (method, arg) { 
      if (method === 'isName') { 
       if (name === arg) { 
        return true; 
       } else { 
        return false; 
       } 
      } else if (method === 'isFemale') { 
       if (gender === arg) { 
        return true; 
       } else { 
        return false; 
       } 
      } 

     } 
    } 
}; 

var chris = PersonFactory.create("Chris", "male", 210, "Pluto"); 
chris('isName', 'Chris'); // returns true 
var jane = PersonFactory.create("Jane", "female", 160, "Alpha Centauri"); 
jane('isName', 'Jane'); // returns true 
jane('isName', 'Chris'); // returns false 

합니다. 명심하십시오. 함수 객체 만 데이터를 숨길 수 있습니다. immaFunciton ('methodName', 'args') 패턴을 사용하여 데이터에 액세스 할 수 있으므로 그리 간단하지는 않습니다.

행운을 빕니다, Chirs

관련 문제