// 什麼是對象
面向對象就是對面向過程對封裝 使代碼高複用低耦合 封裝繼承多態
var xm={ // 封裝後使字符串有意義比如name代表了名字
name:"小明",
liuDog:function(){
console.log("我在遛狗呀");
}
}
// 使代碼模塊話 可以提高複用性和降低耦合度
// 封裝
var obj={
}
var obj1={
name:"張學友",
sayHello:function () {
console.log("hello");
}
}
//obj.sayHello(); // is not a function
// 混入式繼承 for in
for (var k in obj1){
obj[k]=obj1[k];
}
obj.sayHello(); // cosole.log(hello)
// 簡單的繼承
實例的父類變量接受子類的對象
// 多態
var xm={ // 可以直接創建一個對象 但是可擴展性太差
name:"小明"
}
var xm=new Object()
xm.name="小明" // 內置函數的方法
function creatObj(name){ // 工廠函數(不推薦使用)
var xm=new Object();
xm.name=name
return xm
}
var xm=creatObj("小明"); // 創建一個簡單的工廠函數
var xh=creatObj("小紅");
console.log(xm,xh)
</script>
function Person(name,say){ // 構造函數 首字母大寫 用來區分
// new 新創建出來的對象賦值給this
this.name=name;
this.say=say
}
var p=new Person("小明2",function(){
console.log("我是小明呀");
}); // new Object();
console.log(p) // 默認返回新創建的這個對象 普通函數則要return
p.say(); // 我是小明呀
// 總的來說 new說用來創建對象的 構造函數是用來初始化對象的
如果像普通函數一樣調用構造函數 this指向window全局變量
// 創建對象的方法
function say(){
console.log("我是"+this.name); //this指向調用該方法的對象
}
function People(name){
this.name=name;
this.say=say; // 所有對象公用一個方法就定義一個函數 防止資源浪費
}
var obj1=new People("obj1");
obj1.say();
var obj2=new People("obj2");
obj2.say();
//構造函數資源浪費的問題