js 對象、原型

var Obj={
	name:'Hello',
	me:function() {
		alert(this.name);
	}
  }
  Obj.me();
  Obj.name="xxd";
  Obj.me();
  function speak(line) {
	alert("speak:"+this.name+","+line);
  }
  /**Function.proprety.apply函數有兩個參數,第一個是this,第二個是arguments**/
  speak.apply(null,["sxxx"]);
  /**也有個call函數,只是第二個參數不是數組**/
  speak.call(null,"sxxx");
  /**構造函數方式建立對象**/
  /**習慣上構造函數的首字母要大寫,以便區別於通常函數**/
  function Rabbit(adjective) {
	this.adjective = adjective;
	this.speak = function(line) {
		alert("speak:"+this.adjective);
	}
  }
 var killerRabbit = new Rabbit("killer");
 killerRabbit.speak("GXXX");
 /**其實也能夠這樣**/
 function makeRabbit(adjective) {
	return {
		adjective:adjective,
		speak:function(line){/****/}
	};
 }
 debugger;
 var blackRabbit = makeRabbit("black");
 /**可是兩種方式仍是有區別的,new的方式使用了原型**/
 /**killerRabbit有個屬性constructor,它指向Rabbit函數,blackRabbit也有這麼一個屬性,但它指向Object函數**/
 /**輸入{}至關於new Object()**/
 /**定義的每個函數都會自動獲取一個prototype屬性,該屬性擁有一個對象---該函數的原型**/
 /**該原型有一個constructor屬性,反指向其當前所屬的函數 **/
 /**雖然對象俗話能夠共享其原型對象的屬性,可是這種共享是單向。所以,原型的屬性影響對象,改變對象卻永遠不會影響到原型**/
 /**準確的規則:查詢一個屬性值的時候,首先查詢對象自身的全部屬性,若是沒有則查找該對象的原型,若是再沒有就查找原型的原型,一次類推**/
 /**所以,能夠重載屬性。如:**/
 Rabbit.prototype.teeth = "why";//這是原型上的屬性
 alert(killerRabbit.teeth);
 Rabbit.teeth = "that";//不起做用
 alert(killerRabbit.teeth);
 killerRabbit.teeth = "this is true";
 alert(killerRabbit.teeth);
相關文章
相關標籤/搜索