var Person = Function(name){ this.name = name } var p = new Person; // new操做符作了如下三件事 var p = {}; // 建立了一個空對象 p.__proto__ = Person.prototype; // 將這個對象的 __proto__成員指向了Person.prototype Person.call(p); // 將Person函數的this指針指向換成p,而後在調用Person函數
一、都是用來改變函數的this對象的指向的。
二、第一個參數都是this要指向的對象。
三、均可以利用後續參數傳參。javascript
片斷一 var xw = { name:'小王', gender:'男', aage:24, say: function(){ alert(this.name + " , " + this.gender + " ,今年" + this.age) } } var xz = { name:'小張', gender: '男', age:25 } xw.say()
片斷一,顯示爲:小王,男,今年24歲。java
那麼如何用wx的say方法來顯示xz的數據呢?數組
一、call的用法:xw.say.call(xh)app
二、apply的用法:xw.say.apply(xh)函數
三、bind的用法:xw.say.bind(xh)();this
看到區別了嗎?call和apply都是對函數的直接調用,而bind方法返回的仍然是一個函數,所以後面還須要()來進行調用才能夠。spa
將例子稍加改造prototype
片斷二 var xw = { name : "小王", gender : "男", age : 24, say : function(school,grade) { alert( this.name + " , " + this.gender + " ,今年" + this.age + " ,在" + school + "上" + grade); } } var xz = { name : "小張", gender : "女", age : 25 }
一、call的用法:xw.say.call(xz,''實驗小學','六年級') // 小張,女,今年25,在實驗小學上六年級。指針
二、apply的用法:xw.say.apply(xz,['實驗小學','六年級']) // 小張,女,今年25,在實驗小學上六年級。code
三、bind的用法:
至於對於何時用什麼方法,其實不用糾結。若是你的參數原本就是存在於一個數組中,那天然用apply,若是參數之間沒有什麼關聯,就用call。
for(i=0, j=0; i<10, j<6; i++, j++){ k = i + j; } //5+5,返回10
for(i=0, j=0; i<2, j<8; i++, j++){ k = i + j; } //7+7,返回14
alert("警告"); // 顯示「肯定」,返回undefined confirm("肯定要清空數據嗎?"); //顯示「取消」和「肯定」,返回false或者true prompt('請輸入數字',''); //顯示輸入框和空白輸如框,有「取消」和「肯定」按鈕,返回null或者輸入的內容
5、javascript的3種主要類型、2種複合類型、3種特殊類型
主要類型:string、number、boolean
複合類型:function、object
特殊類型:null、undefind