それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

JavaScriptで文字列化したfunction を実行する

eval しなくてもいい感じ

Function.call(this, "return "+ v  )();

javascript の深淵に触れた気がする

var a = {name:"takuya",say:function(){console.log(this.name)}}
//=>{ a: 'takuya', say: [Function] }
var b = a.say.toString()
//=>'function (){console.log(this.a)}'
var c = Function.call(null,"return "+b)()
c.call(a)
//=>takuya

Javascript は、関数の実行時にthis のコンテキストを次々と変えることが出来る。なのでデータと処理を一対一に対応させる「クラス」という概念は少し違った設計思想になっているようだ

js における this は不安定さがあるけど、慣れると便利だ。

var a = {name:"takuya"}
console.log_this = function(){ console.log(this) }
console.log_this() //=>Console {...}
// 関数をコピー
a.log = console.log_this
a.log()   //=>{ name: 'takuya', log: [Function] }
// 別オブジェクト
b = {name:"taro"}
a.log.call(b) //=>{ name: 'taro' }

関数は関数として単体で存在しているので、call を使えば、実行する主体を変えることが出来る。

これはこれで、便利なときと不便な時があるので好みの分かれる所。あまりコーディング規約で自由さを制限してしまうとJSで書く意味が薄れるのであまり制限してほしくないとも思う。