//對象
//在這裡我們定義了一個貓對象,它包含一個名字屬性,一個大笑聲屬性,和一個哭的方法。
var Cat={//定義一個貓對象
name:'Persian', //它叫波斯貓
lol:(function(){//定義一個大聲笑的聲音
var s='meow';
return s+'...'+s+' ';
})(),//注意這裡()立即執行方法,返回叫聲賦給lol
cry:function(){//定義一個哭的方法
var s='wuuu';
return this.name+' 哭了:'+s+'...'+s+' ';//這裡是一個閉包
}
};
//下面我們來看看效果
document.write(Cat.name+' 高興時的叫:'+Cat.lol +' '+Cat.cry() +"</br>");
/*輸出
Persian 高興時的叫:meow...meow Persian 哭了:wuuu...wuuu
*/
//構造器
//定義一個老鼠的構造器
var Mouse=function(name){
this.name=name||'老鼠嘍囉';//建構函式以this關鍵字區分於函數
}
/*
var mouse=Mouse('Mickey'); //錯誤的執行個體化,忘記了加new關鍵字
document.write(mouse); //undefined 未定義,因為方法沒有任何返回
document.write(name); //會輸出Mickey,因為錯誤的忘了加new關鍵字,導致定義的是一個方法,而這個方法Mouse('Mickey')執行後導致this.name=name,name變成了全域成員了。
*/
var Animal={//定義動物對象
run:function(){ alert('running!'); }
}
Mouse.prototype=Animal;//原型(繼承)動物對象
var Mi=new Mouse('Mickey');//構造的是米老鼠
document.write(Mi.name);//Mickey
Mi.run();//調用父類run的方法,跑起來。