추가 된 상속을 사용하여 모듈 패턴을 파악하려고합니다. 저는 대학 배경에서 왔는데, 주로 트렁크에 자바가 있습니다. 그러나 저는 약 10 년 동안 웹 기술을 사용해 왔습니다. 나는 자바 스크립트로 약 1 년 ..."OOP"JavaScript 파악 : 상속을 사용하는 모듈 패턴
어쨌든, 나는 간단한 상속 (.prototype
) 예제를 시도하고있다. People
개체에서 Gentleman
을 추가 한 다음 .toString()
메서드를 사용하여 나열 할 수 있습니다. Gentleman
은 Human
에 속하는 아이입니다. "추상적 인"Human
을 구현하기 전까지는 좋았지 만 코드는 실행되지 않습니다.
내 코드와 관련하여 잘못된 점에 대해 의견을 보내주십시오. 모듈/프로토 타입 접근법을 유지하고 싶습니다만, 내가 잘못하고있는 것은 무엇입니까? 또한 this
은 다른 상황에서 어떤 의미인지 들어 보았습니다. 즉, People
에있는 개인 _people
을 직접 사용할 수는 있지만 서브 모듈에서는 this._name
을 사용해야합니까?
var People = People || {};
People = (function() {
var People = function(){
this._people = [];
};
var addGentleman = function (name) {
this._people.push(new People.Gentleman(name));
};
var getList = function() {
var temp = [];
for (var i = 0; i < this._people.length; i++) {
temp.push(this._people[i].toString());
}
return temp;
};
People.prototype.constructor = People;
People.prototype.addGentleman = addGentleman;
People.prototype.getList = getList;
return People;
})();
People.Human = (function() {
var Human = function (name, hasLadyParts) {
this._name = name;
this._hasLadyParts = hasLadyParts;
};
var hasLadyParts = function() {
return this._hasLadyParts;
};
var toString = function() {
var str = this._name;
if (!this._hasLadyParts) str += ' no';
return str + ' lady parts.';
};
Human.prototype.constructor = Human;
Human.prototype.hasLadyParts = hasLadyParts;
Human.prototype.toString = toString;
return Human;
})();
People.Gentleman = (function() {
var Gentleman = function (name) {
People.Human.call(this, name, false);
}
var toString = function() {
return 'Mr.' + People.Human.toString();
};
// Gentleman.prototype = Object.create(People.Human.prototype);
Gentleman.prototype.constructor = Gentleman;
Gentleman.prototype.toString = toString;
return Gentleman;
})();
$(function() {
var people = new People();
people.addGentleman('Viktor');
people.addGentleman('Joakim');
var list = people.getList();
var $ul = $('#people');
for (var i = 0; i < list.length; i++) {
$ul.append('<li>' + list[i] + '</li>');
}
});
바이올린 : 나는 코드를 업데이트하고 조금 바이올린했습니다 : http://jsfiddle.net/5CmMd/5/
편집. 이 기능을 작동 시키면 대부분의 디자인을 이해할 수 있다고 생각합니다. 이 예제는 JavaScript 토지를 방문하는 미래의 OOP 프로그래머를위한 간단한 튜토리얼로도 작용할 것이라고 나는 생각한다.
패턴 설명에 대한 링크를 제공 할 수 있습니까? 나는 일하는 것을 원하지 않는 많은 일들을 볼 수 있지만, 이드는 일하는 패턴 측면에서 오히려 문구를 사용한다. –
이 패턴은 실제로 잘 설명되지 않습니다. 나는 JS 토론에서 받아 들일 수있는 것으로 함께 나에게 맞는 것을 결합하려고 노력하고있다. 이 패턴에 대한 한 가지 매우 빠른 시도 : http://stackoverflow.com/questions/8683125/combining-inheritance-with-the-module-pattern 지옥, 원하는 것을 자유롭게 변경하고 대부분의 설명을 읽을 수 있습니다. 그들이 잘 정의되어 있다면. :) – Viktor