際際滷

際際滷Share a Scribd company logo
プロパティディスクリプ
タとそのライブラリ
Gunma.web #14 k燕
お念lよ
? 翫嗔初
? @jbking
? Python!
? Python!!
? Python!!!
? JavaScript
? jQuery聞い
ECMA-262 5.1
ECMAScript
Property Descriptor
Property
Descriptor?
? オブジェクトごとの
プロパティの咾
峰
? value
? writable
? enumerable
? configurable
? setter/getter foo.bar
オブジェクト プロパティ
Object.defineProperty(foo, `bar¨, {
get: function() {
return `baz¨;
},
set: function(v) {
console.log(v);
}
});
foo.bar
`baz¨
foo.bar = `qux¨
qux // console.log
`qux¨
foo.bar
`baz¨
Property
Descriptor?
? オブジェクトごとの
プロパティの咾
峰
? value
? writable
? enumerable
? configurable
? setter/getter
ここまでが児云
BeautifulProperties.js
Hookable
LazyInitializable
Events
Observable
Versionizable
https://github.com/monjudoh/BeautifulProperties.js/
BeautifulProperties.LazyInitializable.define(
object,
`key¨,
{
init: function () {
console.log(`initialized¨);
return 1;
}
}
);
object.key
initialized // console.log
1
LazyInitializable
? 兜豚晒をW决させる
BeautifulProperties.Hookable.define(
object,
`key¨,
{
beforeGet: function () { console.log(`beforeGet¨); },
afterGet: function (v) { console.log(`afterGet¨, v); },
beforeSet: function (v, p) { console.log(`beforeSet¨, v, p); },
afterSet: function (v, p) { console.log(`afterSet¨, v, p); }
}
);
object.key
beforeGet // console.log
afterGet undefined // console.log
undefined
object.key = 10
beforeSet 10 undefined // console.log
afterSet 10 undefined // console.log
10
Hookable
? getter/setterの岷念
と岷瘁にそれぞれ
フックを碧zめる
? 、筝も
BeautifulProperties.Events.on(object, `event1¨,
object,
`event1¨,
function () {
console.log(`event1 called¨);
}
);
BeautifulProperties.Events.trigger(object, `event1¨)
event1 called // console.log
undefined
Events
? オブジェクトにし
てイベントをはれる
? jQ.on/jQ.triggerのよ
うなもの
? プロトタイ
プへ参
BeautifulProperties.Observable.define(
object,
`key¨
);
BeautifulProperties.Events.on(
object,
`change:key¨,
function (_ev, v, p) {
console.log(`key is changed¨, v, `from¨, p);
}
);
object.key = `foo¨
key is change foo from undefined // console.log
`foo¨
Observable
? プロパティの筝で
イベントをk佩でき
る
BeautifulProperties.Versionizable.define(
object,
`key¨
);
object.key = `foo¨
`foo¨
object.key = `bar¨
`bar¨
BeautifulProperties.Versionizable.getVersions(
object,
`key¨)
[ { value: `bar¨, timestamp: 1379121665980 },
{ value: `foo¨, timestamp: 1379121662234 } ]
Versionizable
? プロパティの筝を
堕sとして隠贋でき
る
? 堕s個笋發任る
匯つのプロパティにして
Mみ栽わせられます
Hookable
LazyInitializable
Events
Observable
Versionizable
BeautifulProperties.Observable.define(
object,
`key¨
);
BeautifulProperties.Versionizable.define(
object,
`key¨
);
BeautifulProperties.Events.on(
object,
`change:key¨,
function () { console.log(`key is change¨); }
);
object.key = `foo¨
key is changed // console.log
`foo¨
BeautifulProperties.Versionizable.getVersions(
object,
`key¨)
[ { value: `foo¨, timestamp: 1379121662234 } ]
Mみ栽わせ箭
? プロパティの筝を
堕s函りながらイベ
ントk佩する
參貧。

More Related Content

プロパティディスクリプタとその嫖ライブラリ