Javascript的建構函式
阿新 • • 發佈:2018-11-24
函式就是一個普通的函式,建立的方式和普通函式沒有區別,不同的是建構函式習慣性首字母大寫。
//使用建構函式建立物件 function Creat(name,age,job){ this.name = name; this.age = age; this.job = job; this.sayName = function (){ //這樣寫不利於效能優化,下面有優化後的方法 console.log(this.name) } }
普通函式是直接呼叫,而建構函式需要用new關鍵字來呼叫。
var person = new Creat('BanesLi',18,'web'); //呼叫建構函式
console.log(person.name); //BanesLi
使用同一個建構函式建立的物件,稱為一類物件,也將一個建構函式稱為一個類。
通過建構函式建立的物件,稱為該類的例項。
var person1 = new Creat('Bob',28,'teacher');
//這兒的person1就是Creat類的例項
原型:prototype
我們所建立的每一個函式,瀏覽器都會向這個函式中新增一個屬性prototype,這個屬性對應著一個物件,這個物件就是所謂的原型物件。
//使用建構函式建立物件 function Creat(name,age,job){ this.name = name; this.age = age; this.job = job; } // 在物件中建立一個方法,使用prototype方法, 這裡和上面的this.sayName=function....是一樣的,但是這樣寫利於效能優化 Creat.prototype.sayName = function () { console.log(this.name); } //建立例項/物件 var person = new Creat('BanesLi',18,'web'); alert(person.age); person.sayName(); //web
如果函式作為普通函式呼叫時,這個prototype屬性沒有任何作用,當函式以建構函式呼叫時,新建立的物件中就會有一個隱含的屬性,這個屬性指向該建構函式的原型物件,可以通過__proto__來訪問該屬性。
console.log(person.__protp__) //object
原型物件就相當於一個公共的區域,所有同一個類的例項都可以訪問到這個原型物件,所以可以將例項中共有的內容,統一設定到原型物件中。
當訪問例項中的一個屬性或者方法時,它會先在例項本身中尋找,如果有直接使用,如果沒有就回去原型物件中尋找,如果找到就直接使用。
原型物件也是物件,所以原型物件也有原型,當使用一個物件的屬性或者方法時,它會先在物件本身中尋找,如果有直接使用,如果沒有就回去原型物件中尋找,如果找到就直接使用,如果還沒找到,就去原型物件的原型中尋找(也就是Object,Object是原型物件的祖先),如果還是沒有,則直接返回undefined。