Web開発

17424c6b :Anonymous 2013-07-26 17:53
JavaScriptでは
セッターはオブジェクトの[[Set]]内部プロパティ、
関数コールもオブジェクトの[[Call]]内部プロパティ、
他にもdeleteなどの演算子から、内部的に使われるものまで
ほぼほぼ全て、オブジェクトの特殊なプロパティとして定義されているけど

それを、無駄にビルドイン関数や演算子増やすこと無く
JS的に扱えるようにする仕組みがsymbolの本質なんだと思う

例えば

obj = {
data : [1, 2, 3, 4, 5]
}

があって、for-ofでdataの中身を列挙させたい場合は、
まあこの場合だとfor(v of obj.data)とすればいいんだけど、
仮にfor(v of obj)の形でしたい場合

import {iter} from '@iter'; //typeof iter === 'symbol'

obj[iter] = () => {
var data = this.data, i = 0

return {
next() { return i < data.length ? {value: data[i++]} : {done: true} }
}

}

みたいな雰囲気でできるってことだと思う

で、sym = Symbol()はそうだね、高速化があったか
Powered by shinGETsu.