JavaScript中的普通函數與構造函數比較

構造函數的定義:html

        構造函數也能夠叫構造對象,配合new表達式一塊兒使用。(注意:這個new關鍵字是必須,若是不加,就不會當成構造函數調用,而只是一個普通的函數。)。從形式上看,一個函數被做爲構造函數仍是普通函數執行的惟一區別,是否用new運算符。函數

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

function fun(name,age){
  this.name=name;
  this.age=age;
}
fun.prototype.say=function(){
  console.log(this.name);
}
var fun=new fun("charming",25);

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

   一、與new表達式配合使用:var fun=new fun("charming",25);.net

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

   三、默認不用return返回值code

      構造函數是不須要用return顯式返回值的,默認會返回this,也就是新的實例對象。固然,也能夠用return語句,返回值會根據return值的類型而有所不一樣。分兩種狀況:htm

   好比:對象

    1.return的是五種簡單數據類型:String,Number,Boolean,Null,Undefined。
    這種狀況下,忽視return值,依然返回this對象。blog

function C2(a, b){
    this.p = a + b;
    this.alertP = function(){
        alert(this.p);
    }
    return this.p;//此返回語句在C2做爲構造函數時沒有意義
}
var c2 = new C2(2,3);
c2.alertP();//結果爲5
alert(C2(2, 3)); //結果爲5

  2.return的是Object
   這種狀況下,再也不返回this對象,而是返回return語句的返回值。

function Person(name){
    this.name=name;
    return {name:"cherry"}
  }
  var person=new Person("sheila");
  person.name;//cherry

 

普通函數:從形式上看,一個函數被做爲構造函數仍是普通函數執行的惟一區別,是否用new運算符。

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

     2.函數內部不建議使用this關鍵字


參照:

 http://www.jb51.net/article/30325.htm

http://www.jb51.net/article/63648.htm

http://www.2cto.com/kf/201402/281841.html

關於構造函數的好文章:

http://www.cnblogs.com/jikey/archive/2011/05/13/2045005.html

相關文章
相關標籤/搜索