什麼是構造函數?

this指向的幾種狀況數組

1.全局中調用app

    this.name //this指向window對象
   
2.函數調用函數

    test();//test()函數中的this也指向window對象
   
3.對象的方法調用this

    obj1.fn();//obj1對象的fn()方法中的this指向obj1
   
4.調用構造函數
    var dog=new Dog();//構造函數內的this指向新建立的實例對象,也就是這裏的dogcall和applyspa

call和apply的做用同樣,只是接受參數的方式不同,call接受的是多個單個參數,apply接受的是參數數組。
call和apply的做用簡單地能夠說成,當一個對象實例缺乏一個函數/方法時,能夠調用其餘對象的現成函數/方法,其方式是經過替換其中的this爲這個對象實例,改變函數運行時的上下文。.net

普通函數與構造函數相比有四個明顯特色:prototype

1.不須要用new關鍵字調用code

    fn();2.能夠用return語句返回值htm

 
1
2
3
4
function fn(a,b){
    return a+b;
  }
  alert(fn(2,3)); //alert:5

3.函數內部不建議使用this關鍵字
咱們說不建議使用,固然硬要用是能夠的,只是要注意這時候發生了什麼。若是在普通函數內部使用this關鍵字定義變量或函數,由於這時候this指向的是window全局對象,這樣無心間就會爲window添加了一些全局變量或函數。對象

 
1
2
3
4
5
6
function greeting(){
     this .name= "sheila" ;
     alert( "hello " + this .name);
   }
   greeting(); //alert:hello sheila
   alert(window.name); //alert:sheila

4.函數命名以駝峯方式,首字母小寫

構造函數
在JavaScript中,用new關鍵字來調用定義的構造函數。默認返回的是一個新對象,這個新對象具備構造函數定義的變量和函數/方法。

舉個例子:

 
1
2
3
4
5
6
7
8
9
10
11
12
13
function Prince(name,age){
   this .gender= "male" ;
   this .kind= true ;
   this .rich= true ;
   this .name=name;
   this .age=age;
}
Prince.prototype.toFrog= function (){
   console.log( "Prince " + this .name+ " turned into a frog." );
}
var prince= new Prince( "charming" ,25);
prince.toFrog(); //Prince charming turned into a frog.
prince.kind; //true

與普通函數相比,構造函數有如下明顯特色:

1.用new關鍵字調用

new關鍵字來完成:
a、建立一個空對象;
b、將關鍵字this指向這個空對象;
c、執行構造函數裏面的代碼,給當前空對象this設置屬性和方法;
d、將this這個當前對象返回。

    var prince=new Prince("charming",25);

2.函數內部可使用this關鍵字
在構造函數內部,this指向的是構造出的新對象。用this定義的變量或函數/方法,就是實例變量或實例函數/方法。須要用實例才能訪問到,不能用類型名訪問。

 prince.age;//25
    Prince.age;//undefined

3.默認不用return返回值
構造函數是不須要用return顯式返回值的,默認會返回this,也就是新的實例對象。固然,也能夠用return語句,返回值會根據return值的類型而有所不一樣,細節將在下文介紹。

4.函數命名建議首字母大寫,與普通函數區分開。
不是命名規範中的,可是建議這麼寫。

1.第一步,建立一個空對象。

var prince={}

2.第二步,將構造函數Prince()中的this指向新建立的對象prince。 3.第三步,將prince的_proto_屬性指向Prince函數的prototype,建立對象和原型間關係 4.第四步,執行構造函數Prince()內的代碼。

相關文章
相關標籤/搜索