今天我們要來說一個在JavaScript中非常重要的概念,那就是函數的new操作符。當我們創建一個函數時,我們可以通過new操作符來創建一個對象類型的實例。這個對象的類型就是我們在函數中定義的構造函數的類型。
function Person(name, age) { this.name = name; this.age = age; }
有了上面的例子,我們就可以使用new操作符來創建一個Person對象的實例:
var person1 = new Person("Tom", 20);
這樣我們就可以訪問person1對象的屬性:
alert(person1.name + "," + person1.age);
使用new操作符的時候,JavaScript會創建一個新的空對象,并用構造函數中指定的參數來初始化它。接著,JavaScript會把新創建的對象賦值給指定的變量,這樣我們就可以通過變量來訪問新創建的對象了。
使用new操作符創建的對象有一個非常重要的屬性,那就是它的原型屬性。每一個JavaScript對象都有一個原型屬性,這個屬性指向了它的原型對象。原型對象的屬性和方法會被所有的對象實例所共享。
Person.prototype.show = function() { console.log(this.name + "," + this.age); } person1.show(); // Tom,20
在上面的例子中,我們向Person構造函數的原型對象中添加了一個show方法。接著,我們通過person1實例來調用這個方法。因為person1的原型指向了Person構造函數的原型對象,所以它可以訪問到這個對象的屬性和方法。
使用new操作符的時候,JavaScript還會為新創建的對象指定一個constructor屬性。這個屬性指向了它的構造函數。
console.log(person1.constructor === Person); // true
通過訪問person1的constructor屬性,我們可以判斷它的對象類型到底是什么。
除了使用new操作符,JavaScript還提供了另一個Object.create方法來創建對象。這個方法可以直接指定新創建的對象的原型。但Object.create方法對于IE9之前的版本不兼容,而new操作符則可以兼容于所有的瀏覽器。因此,我們在實際的開發中還是應該優先選擇使用new操作符來創建對象。
var obj = Object.create(Person.prototype);
使用Object.create方法來創建對象時,我們可以直接指定新創建的對象的原型為Person構造函數的原型對象。
在JavaScript中,函數有著非常重要的地位。函數的new操作符為我們提供了一種非常方便的方式來創建對象類型的實例。通過定義構造函數和它的原型對象,我們可以非常容易地創建出一個完整的對象類型,并訪問它的屬性和方法。在實際的開發中,我們應該熟練掌握函數的new操作符,并合理應用它來提高我們的代碼效率和質量。