當前位置:才華齋>設計>網頁設計>

有關JavaScript中的prototype.bind()方法介紹

網頁設計 閱讀(3.24W)

以前,你可能會直接設定self=this或者that=this等等,這樣做當然也能起作用,但是使用()會更好,看上去也更專業。

有關JavaScript中的prototype.bind()方法介紹

下面舉個簡單的例子:

複製程式碼 程式碼如下:

var myObj = {

specialFunction: function () {

},

anotherSpecialFunction: function () {

},

getAsyncData: function (cb) {

cb();

},

render: function () {

var that = this;

syncData(function () {

ialFunction();

herSpecialFunction();

});

}

};

er();

在這個例子中,為了保持myObj上下文,設定了一個變數that=this,這樣是可行的,但是沒有使用()看著更整潔:

複製程式碼 程式碼如下:

render: function () {

syncData(function () {

ialFunction();

herSpecialFunction();

}(this));

}

在呼叫()時,它會簡單的建立一個新的函式,然後把this傳給這個函式。實現()的程式碼大概是這樣的:

複製程式碼 程式碼如下: = function (scope) {

var fn = this;

return function () {

return y(scope);

};

}

下面在看一個簡單的使用()的.例子:

複製程式碼 程式碼如下:

var foo = {

x: 3

};

var bar = function(){

(this.x);

};

bar(); // undefined

var boundFunc = (foo);

boundFunc(); // 3

是不是很好用呢!不過遺憾的是IE8及以下的IE瀏覽器並不支援()。支援的瀏覽器有Chrome 7+,Firefox 4.0+,IE 9+,Opera 11.60+,Safari 5.1.4+。雖然IE 8/7/6等瀏覽器不支援,但是Mozilla開發組為老版本的IE瀏覽器寫了一個功能類似的函式,程式碼如下:

複製程式碼 程式碼如下:

if (!) {

= function (oThis) {

if (typeof this !== "function") {

// closest thing possible to the ECMAScript 5 internal IsCallable function

throw new TypeError(" - what is trying to be bound is not callable");

}

var aArgs = (arguments, 1),

fToBind = this,

fNOP = function () {},

fBound = function () {

return y(this instanceof fNOP && oThis

? this

: oThis,

at((arguments)));

};

otype = otype;

otype = new fNOP();

return fBound;

};

}