1. 程式人生 > >New操作內部步驟、call/apply/bind區別、alert種類、逗號語句

New操作內部步驟、call/apply/bind區別、alert種類、逗號語句

一、new操作符具體幹了什麼?

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函式

二、call 、apply和bind的區別

(一)、相似之處:

1、都是用來改變函式的this物件的指向的。
2、第一個引數都是this要指向的物件。
3、都可以利用後續引數傳參。

(二)、區別:

片段一

var xw = {
 name:'小王',
 gender:'男',
 aage:24,
 say: function(){
   alert(this.name + " , " + this.gender + " ,今年" + this.age)
 }
}

var xz = {
 name:'小張',
 gender: '男',
 age:25
}

xw.say()

片段一,顯示為:小王,男,今年24歲。

那麼如何用wx的say方法來顯示xz的資料呢?

1、call的用法:xw.say.call(xh)

2、apply的用法:xw.say.apply(xh)

3、bind的用法:xw.say.bind(xh)();

看到區別了嗎?call和apply都是對函式的直接呼叫,而bind方法返回的仍然是一個函式,因此後面還需要()來進行呼叫才可以。

(三)、call和apply的區別

將例子稍加改造

片段二

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
}

1、call的用法:xw.say.call(xz,''實驗小學','六年級')    // 小張,女,今年25,在實驗小學上六年級。

2、apply的用法:xw.say.apply(xz,['實驗小學','六年級']) // 小張,女,今年25,在實驗小學上六年級。

3、bind的用法:

  1. xw.say.bind(xz,"實驗小學","六年級")();
  2. xw.say.bind(xz)("實驗小學","六年級");

 

總結:

至於對於什麼時候用什麼方法,其實不用糾結。如果你的引數本來就是存在於一個數組中,那自然用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

四、js中3中彈窗的訊息提醒(警告視窗、確認視窗、資訊輸入視窗)

alert("警告"); // 顯示“確定”,返回undefined
confirm("確定要清空資料嗎?"); //顯示“取消”和“確定”,返回false或者true
prompt('請輸入數字',''); //顯示輸入框和空白輸如框,有“取消”和“確定”按鈕,返回null或者輸入的內容

五、javascript的3種主要型別、2種複合型別、3種特殊型別

主要型別:string、number、boolean

複合型別:function、object

特殊型別:null、undefind