對象:黑盒子,不知道內部構造,但會使用表面的功能
面向對象的特點
- 抽象:抽出我們關心的特點
- 封裝:黑盒子,不知道內部構造,但會使用表面的功能
- 繼承:繼承父類所有特點,又有自己的特點
1. 多重繼承
2. 多態(tài)
變量/屬性 函數/方法
- 變量的自由的,屬性是有主的(對象的)
- 函數是自由的,方法是有主的(對象的)
this:當前的方法屬于誰(當前發(fā)生事件的對象)
工廠模式的缺點(構造函數)
- 沒有new
- 同樣的方法沒有共享,導致占用內存,showName是同樣的方法,不需要重復初始化
function createPerson(name){
//原料
var p = new Object();
//加工
p.name = name;
p.showName = function(){
return this.name;
}
//出廠
return obj;
}
改1
解決new 但是方法還是沒有共享
// 類名首字母大寫
function CreatePerson2(name){
//系統(tǒng)偷偷為我們創(chuàng)建
//var this = new Object();
this.name = name;
this.showName = function(){
return this.name;
}
//系統(tǒng)偷偷為我們出廠
//return this;
}
var jack = new createPerson2("jack");
var dav = new createPerson2("dav");
alert(jack.showName == dav.showName); // false
類和對象
類: 模子 Array
對象:產品(成品) arr
原型 prototype
css中的class:一次給一組元素加上樣式 --->js的原型
行間樣式: 一次給一個元素加上樣式 --->js給對象加東西
改2 混合方式
- 構造函數加屬性
- 原型加方法
- 類名首字母大寫
function CreatePerson3(name){
this.name = name;
}
//為類加一個共通方法 實現(xiàn)方法的共享
CreatePerson3.prototype.showName = function(){
return this.name;
}
var jack = new CreatePerson3("jack");
var dav = new CreatePerson3("dav");
alert(jack.showName == dav.showName); // true