1. 程式人生 > >Javascript的建構函式

Javascript的建構函式

函式就是一個普通的函式,建立的方式和普通函式沒有區別,不同的是建構函式習慣性首字母大寫。

//使用建構函式建立物件
			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。