blog

バインドの実装をシミュレートする方法

bind がコールされると、新しい関数の this が bind の最初の引数として指定されます。...

Mar 17, 2020 · 1 min. read
シェア

バインド実装のシミュレーション方法

bind() 関数は新しい関数を作成します。bind() がコールされると、 bind の最初のパラメータとして新しい関数の this が指定され、 その他のパラメータは新しい関数のパラメータとして使用されます。

バインドとは何ですか?

通常の関数が thisポインタを変更する場合。

コンストラクタがプロトタイプのプロパティとメソッドを取得するため。

bind

バインディング関数の作成

var x = 10
var model = {
 x: 100,
 getX: function () {
 console.log(this.x)
 return this.x
 }
}
model.getX()// 100
var getX = model.getX
getX() // 10 この時点で thisはウィンドウを実行する。
var newGetX = getX.bind(model)
newGetX() // 100

機能の迅速な使用

var unboundSlice = Array.prototype.slice
var slice = Function.prototype.apply.bind(unboundSlice)
function aa(1,2,3) {
 console.log(arguments)
 slice(arguments)
}

bind

Function.prototype.bind = function(conext, ...args) {
 var self = this
 var fNOP = function () {}
 // 高階関数は関数を返す
 var fbound = function() {
 // 実行中に thisのポイントを変更する
 self.apply(this instanceof self ? this : context,
 args.concat(Array.prototype.slice.call(arguments)))
 }
 fNOP.prototype = this.prototype
 fbounf.prototype = new fNOP()
 return fbound
}
Read next

DataBinding、フレームワークの好き嫌いは分かれる!

私が勉強を始めたころは、フレームワークのアーキテクチャをあまり意識しておらず、これとこれとがどうなっているのか、なぜこんなに面倒なのか?だから私はそれを使用したことはありません。 その後、私は本当にMVVMフレームワークと組み合わせて、その使用を理解した後、私はそれが本当に多くの作業を節約することがわかり、それは一定のしきい値があるため、嫌われ、エラープロンプトは十分に友好的ではありませんが、私はでカプセル化...

Mar 17, 2020 · 22 min read