상속 될 수 있고 일부 공용 속성이있는 캡슐화 된 개체를 만들려고합니다.모듈 패턴 및 범위
var MyObject = (function()
{
function myObject()
{
//Public variables
this.publicVar1 = 'hello';
this.publicVar2 = 'world';
}
function foo()
{
console.log(this.publicVar1 + ' ' + this.publicVar2);
}
function bar()
{
foo();
}
//Public API
myObject.prototype = {
constructor: myObject,
foo: foo,
bar: bar
}
return myObject;
})();
var mo = new MyObject();
mo.foo(); //hello world
mo.bar(); //undefined undefined
내 질문은 왜 정확히 mo.bar()가 '정의되지 않은 정의되지 않은'로그 않고 내가이 문제를 해결하는 방법 : 여기에 몇 가지 코드는?
publicVar1 및 publicVar2를 내부적으로 MyObject 모듈에 유지하려고하지만 myObject 프로토 타입을 확장하는 다른 모든 객체에 공개적으로 액세스하고 상속 할 수도 있습니다.
감사합니다.
. 나는 아직도 불분명하다. 당신은 전혀 정교 할 수 있습니까? this.foo()를 호출하면 프로토 타입에서 함수를 호출하고 publicVar1과 publicVar2가 해당 프로토 타입의 객체의 멤버이므로 올바른 범위에 있습니까? 다시 한번 감사드립니다. – adampetrie
@adampetrie 프로토 타입은 모든 인스턴스에 의해 상속되며 인스턴스의 일부인 것처럼 처리됩니다 (인스턴스에서 설정 한 경우 덮어 쓰지 않고 섀도 잉 됨). 'mo.prototype'는'foo'를 가지고 있습니까? 예 .' mo.prototype'의'foo'를'mo '. " 따라서이 호출 중에'foo' 내부에서'this '는'mo'를 의미하므로'this.bar()'를 실행하는 것은'mo.bar()'와 같다. –