everything is object (萬物皆物件)
可以從下面兩個方面來理解
1.物件是對單個事物的抽象
2.物件是乙個容器,封裝了屬性(property)和方法(method)
物件導向只是過程式**的一種高度封裝,目的在於提高**的開發效率和可維護性
1.2.1物件導向與面向過程
1.面向過程就是親力親為
2.物件導向就是將執行者轉變為指揮者
3.物件導向是對面向過程的封裝
var obj =
}
var obj = new object();
obj.name = "tom ";
obj.*** = " man";
obj.age = 19;
obj.run = function()
具有相同特性(資料元素)和行為(功能)的物件的抽象就是類,因此,物件的抽象是類,類的具體化就是物件,也可以說類的例項是物件,類實際上就是一種資料型別。類具有屬性,它是物件狀態的抽象,用資料結構來描述類的屬性。類具有操作,它是物件行為的抽象,用操作名和實現該操作的方法來描述。
類(class)是乙個抽象的概念,物件則是類的具體例項
類例項化的結果就是物件,而物件的抽象就是類,類描述了一組有相同特性(屬性)和相同行為的物件
class person//這個是類
$obj = new person();//類的例項化就是物件
使用簡單的函式建立物件,為物件新增屬性和方法,然後返回物件
// class 模板
function person(name,***,age);
obj.name = name;
obj.*** = ***;
obj.age = age;
obj.run = function()
return obj;
}// 例項化
var person1 = person("tom","***",19);
//操作
person1.run(); // 輸出結果:每天堅持跑步
4.1.1工廠模式的優缺點
優點: 1.在工廠模式中,使用者只需要知道所要生產的具體東西,無需關心具體的建立過程,甚至不需要具體產品類的類名
2.在系統增加新的產品時,我們只需要新增乙個具體產品類和對應的實現工廠,無需對原工廠進行任何修改,很好的符合了「開閉原則」
缺點:每次增加乙個新產品時,都需要增加乙個具體類和物件實現工廠,使得系統中類的個數成倍增加,在一定的程度上增加了系統的複雜度,同時也增加了系統具體類的依賴
建立自定義引用型別,可以像建立內建物件例項一樣使用new操作符
缺點:建構函式的每個成員無法復用,每次建立出的物件都只是私有變數和私有方法,不能實現共用
//建構函式(這裡就建立了乙個class模板)
function person(name,***,age)
}// 例項化 ( new object())
var person1 = new person("tom","man",19);
//操作
person1.run();// 每天堅持跑步
4.2.1建構函式的改進// 構造全域性的物件
var action =
}//建構函式
funcction(name,***,age)
//例項化
var person1 = new person("tom","man",19);
person1.run();
使用建構函式的prototype屬性來指定共享的屬性和方法,即使用建構函式定義例項屬性,使用原型定義共享的屬性和方法
//建構函式
function person(name,***,age)
//使用原型物件 object.prototype
person.prototype.run = function()
//例項化
var person1 = new person("tom","man",19);
person1.run();// 每天堅持跑步
proto: 物件的原型。所有物件都有(包括函式)
prototype:函式的原型物件。只有函式(準確來說是建構函式)才有
constructor:物件上的乙個屬性,預設指向這個原型的建構函式
[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-w6ltlypq-1594203192274)(c:\users\administrator\desktop\01.webp)]
this的指向在函式定義的時候是確定不了的,只有函式執行的時候才能確定this到底指向的是誰
function show()
show();
this最終指向的是呼叫它的物件,這裡的函式show()實際是被window物件所呼叫出來的
function show()
window.show();
var show =
}show.fn();
這裡this指向的是物件show,誰呼叫就指向誰
function fn()
var a = new fn();
console.log(a.user); //tom
這裡this指向物件a,因為new關鍵字可以改變this的指向
當this碰到return:
function fn();
}var a = new fn();
console.log(a.user);//undefined
function fn();
}var a = new fn();
console.log(a.user);//undefined
function fn()
var a = new fn();
console.log(a.user);// tom
function fn()
var a = new fn();
console.log(a.user);//tom
如果返回值是乙個物件,那麼this指向的就是那個返回的物件,如果返回值不是乙個物件那麼this還是指向函式的例項
function fn()
var a = new fn();
console.log(a.user);//tom
雖然null也是物件,但是在這裡this還是指向那個函式的例項,因為null比較特殊 js物件導向
物件導向是相對於面向過程而提出的程式設計思想 核心在於通過這種方法的設計出來的程式不再是機械的按照設定的步驟去執行,而是按照需要的步驟去執行。舉個例子 乙個人要吃飯,如果用的面向過程的話就必須執行吃飯前的一切行為,而物件導向則可以跳過之前的環節!建構函式 所謂的工廠方式 用來構造抽象物件,通過呼叫建...
js物件導向
js物件導向 一 什麼是物件 物件可以看成乙個屬性的集合。對像一般有屬性和方法構成,方法的實質是函式,而屬性的實質是變數。二 什麼是物件導向 物件導向可以理解為不需要去了解對像的內部結構,就可以使用它。像我們的date 對像的方法可以獲取和設定時間,但我們並不了解其內部原理。三 物件導向 抽風機 抽...
JS物件導向
一 js物件導向 js是一門指令碼語言,不是物件導向的語言,它沒有類的概念,有物件的概念。物件導向程式設計 oop 和面向過程程式設計 opp 的區別 面向過程以 事件為中心,將完成整個事件拆分成若干個步驟,按照步驟依次執行。物件導向以 事物為中心,完成某個需求需要哪些事物參與,側重點在於每個事物的...