js高級1 面向對象 封裝繼承多態 創建一個對象多種方法(主要是構造函數) 構造函數的問題

//  什麼是對象

面向對象就是對面向過程對封裝 使代碼高複用低耦合   封裝繼承多態

 

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();

//構造函數資源浪費的問題

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章