JavaScriptののバインド方法



バインドメカニズム

 

var foo = function(){}
var bar = foo;

console.log(foo === bar) //true

/*--------------------------------------*/

var foo = function(){}
var bar = function(callback1,callback2){
    console.log(callback1 === callback2)  //true
}

bar(foo,foo)

/*--------------------------------------*/

var foo = function(){}
var bar = function(){}

console.log(foo === bar) //false    //两个函数,不在同一内存地址中,所以返回了false

オブジェクトのプロパティとメソッドだけでなく、機能的なオブジェクトを持って、我々はまた、それがオブジェクトであるため、それはよく知っているとメソッド、バインド以下の方法が関数オブジェクトで、関数オブジェクトを呼び出すことができます。
我々は、すべてのオブジェクトが参照型で、参照はメモリアドレスであることを知って、上記callback1 ===それが真実であるアドレスを指すcallback2 2つのポインタ。


var foo = function(){}
var fooBind = foo.bind()

console.log(foo === fooBind) // false

/*--------------------------------------*/

var foo = function(){}
var fooBind = foo.bind()

var bar = function(callback1,callback2){
    console.log(callback1 === callback2)  //false
}

bar(foo,fooBind)

上記のコードfoo.bind()の戻り値は、新たな機能である、実際には、コピーFOOで、彼ら二人は、そのFOOを任意の関係を持っていなかったとfooBindは、同じメモリアドレスにされていませんので、falseを返します。


var foo = function(){}
var fooBind1 = foo.bind()
var fooBind2 = foo.bind()

console.log(fooBind1 === fooBind2) //false

fooBind1とfooBind2上記foo.bindを使用されているが()、それがコピーされているが、彼らはまた、任意の関係、2つの完全に独立した機能を持っていませんでした。


var obj = {key:"value"}
var foo = function(){
    return this;
}
var fooBind1 = foo.bind(obj)
var fooBind2 = foo.bind(obj)

console.log(  fooBind1() === fooBind2 ()   )    //true   他们都指向了同一个obj
console.log(  fooBind1 === fooBind2         )    //false     他们分别是存在两个不同内存地址中的,与函数中的this无关,所以返回了false

一部の人々は、オブジェクトobj主な目的は、私は彼らのためにfooBind2の方法でfooBind1とバインドをコピーする場合は、この時点ことを、関数の中でこの点を変更するためにバインドする方法にあり、このfooBind1とfooBind2思いますそれはまだ同じメモリアドレスであります






バインドの使用

var obj = {key:"value"}
var foo = function(){
    console.log(this)    //obj
}.bind(obj)

foo()

/*--------------------------------------*/

var obj = {key:"value"}
var foo = function(){
    console.log(this)    //obj
}

foo.bind(obj)()         //也可以这样

この時点で、OBJ内のfooをしてみましょう。新機能は、fooのfooという自体後に返さなく、むしろバインドをコールしていません。注


var obj = {

    method:function(){

        setTimeout(function(){

            console.log(this)    //obj     注意:function(){console.log(this)}.bind(this) 返回值是一个函数

        }.bind(this),1000)
    }
}

obj.method()

/*--------------------------------------*/

var obj = {
    method:function(){

        var arg = function(){
              console.log(this)     //obj
        }

        var argBind = arg.bind(this)    //返回来的argBind函数与arg函数完全没有任何关系。

        setTimeout(argBind,1000)      //与上面的写法完全相等
    }
}

obj.method()

使用するのは簡単

 



バインドメカニズム

 

var foo = function(){}
var bar = foo;

console.log(foo === bar) //true

/*--------------------------------------*/

var foo = function(){}
var bar = function(callback1,callback2){
    console.log(callback1 === callback2)  //true
}

bar(foo,foo)

/*--------------------------------------*/

var foo = function(){}
var bar = function(){}

console.log(foo === bar) //false    //两个函数,不在同一内存地址中,所以返回了false

オブジェクトのプロパティとメソッドだけでなく、機能的なオブジェクトを持って、我々はまた、それがオブジェクトであるため、それはよく知っているとメソッド、バインド以下の方法が関数オブジェクトで、関数オブジェクトを呼び出すことができます。
我々は、すべてのオブジェクトが参照型で、参照はメモリアドレスであることを知って、上記callback1 ===それが真実であるアドレスを指すcallback2 2つのポインタ。


var foo = function(){}
var fooBind = foo.bind()

console.log(foo === fooBind) // false

/*--------------------------------------*/

var foo = function(){}
var fooBind = foo.bind()

var bar = function(callback1,callback2){
    console.log(callback1 === callback2)  //false
}

bar(foo,fooBind)

上記のコードfoo.bind()の戻り値は、新たな機能である、実際には、コピーFOOで、彼ら二人は、そのFOOを任意の関係を持っていなかったとfooBindは、同じメモリアドレスにされていませんので、falseを返します。


var foo = function(){}
var fooBind1 = foo.bind()
var fooBind2 = foo.bind()

console.log(fooBind1 === fooBind2) //false

fooBind1とfooBind2上記foo.bindを使用されているが()、それがコピーされているが、彼らはまた、任意の関係、2つの完全に独立した機能を持っていませんでした。


var obj = {key:"value"}
var foo = function(){
    return this;
}
var fooBind1 = foo.bind(obj)
var fooBind2 = foo.bind(obj)

console.log(  fooBind1() === fooBind2 ()   )    //true   他们都指向了同一个obj
console.log(  fooBind1 === fooBind2         )    //false     他们分别是存在两个不同内存地址中的,与函数中的this无关,所以返回了false

一部の人々は、オブジェクトobj主な目的は、私は彼らのためにfooBind2の方法でfooBind1とバインドをコピーする場合は、この時点ことを、関数の中でこの点を変更するためにバインドする方法にあり、このfooBind1とfooBind2思いますそれはまだ同じメモリアドレスであります






バインドの使用

var obj = {key:"value"}
var foo = function(){
    console.log(this)    //obj
}.bind(obj)

foo()

/*--------------------------------------*/

var obj = {key:"value"}
var foo = function(){
    console.log(this)    //obj
}

foo.bind(obj)()         //也可以这样

この時点で、OBJ内のfooをしてみましょう。新機能は、fooのfooという自体後に返さなく、むしろバインドをコールしていません。注


var obj = {

    method:function(){

        setTimeout(function(){

            console.log(this)    //obj     注意:function(){console.log(this)}.bind(this) 返回值是一个函数

        }.bind(this),1000)
    }
}

obj.method()

/*--------------------------------------*/

var obj = {
    method:function(){

        var arg = function(){
              console.log(this)     //obj
        }

        var argBind = arg.bind(this)    //返回来的argBind函数与arg函数完全没有任何关系。

        setTimeout(argBind,1000)      //与上面的写法完全相等
    }
}

obj.method()

使用するのは簡単

おすすめ

転載: www.cnblogs.com/macliu/p/12076674.html