2017年04月17日

[書評]オブジェクト指向javascriptの原則 6章を読んだ

オブジェクト指向JavaScriptの原則

新品価格
¥2,592から
(2017/4/17 20:35時点)



[書評]オブジェクト指向javascriptの原則 5章を読んだ
の続編

6章はオブジェクトのパターン
以下、6章

・private変数
var a = (function() {
var name = "masterka"; //これがprivate変数
function print() { //private関数
return "bb";
}
return {
name: name,
print: print
}
}());


・コンストラクタ
function Person(name) {
var name = name;
this.getName = function() {
return name;
}
}
var person = new Person("masterka");
console.log(person.name); //undefined
console.log(person.getName()); //masterka


・コンストラクタ2
ただ、こっちはperson2.nameでアクセスできちゃうけど
var Person2 = (function() {
function InnerPerson(name) {
this.name = name;
}
InnerPerson.prototype.getName = function() {
return this.name;
};
return InnerPerson;
}());
var person2 = new Person2("masterka");
console.log(person2.getName());


・Mixin
継承でなく、こういう方法もある
function mxin(receier, supplier) {
for (var p in supplier) {
if (supplier.hasOwnProperty[p]) {
receiver[p] = supplier[p];
}
}
return receiver;
}


・Mixin2
function EventTarget() {
}

EventTarget.prototype = {
constructor: EventTarget,
addListener: function(type, listener) {
if (!this.hasOwnProperty("_listeners")) {
this._listeners = [];
}
if (typeof this._listeners[type] == "undefined") {
this._listeners[type] = [];
}
this._listeners[type].push(listener);
},

fire: function(event) {
if (!event.target) {
event.target=this;
}

if(!event.type){
throw new Error("event object missing type");
}

if (this._listeners && this._listeners[event.type] instanceof Array) {
var listeners = this._listeners[event.type];
for (var i=0, len=listeners.length; i<len; i++) {
listeners[i].call(this, event);
}
}
},

removeListener: function(type, listener) {
if (this._listeners && this._listeners[type] instanceof Array) {
var listeners = this._listeners[type];
for (var i=0,len=listeners.length; i<len; i++){
if (listeners[i] === listener) {
listeners.splice(i, 1);
break;
}
}
}
}
}

//使い方
var target = new EventTarget();
target.addListener("mes" , function(event) {
console.log(event.data);
});
target.fire({
type:"mes",
data:"masterka"
});


・newを自動で付与する
newを使わずに自動で付与する
function Person(name) {
if (this instanceof Person) {
this.name = name;
} else {
return new Person(name);
}
}
//使い方
var a = Person("aaa");



本章もとてもためになりました
オブジェクト指向javascriptの原則はこれにて終わり
とてもためになったので皆さんもぜひどうぞ
タグ:javascript
posted by マスタカ at 20:37 | Comment(0) | TrackBack(0) | | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。