當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
JavaScript-面向对象详解
生活随笔
收集整理的這篇文章主要介紹了
JavaScript-面向对象详解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
對象的概述 JavaScript是基于面向對象的語言。在JavaScript中幾乎所有的東西都是對象或者用起來像對象。對象是一組無序的有命名值(屬性)的集合,可以是對象、基本值,以及函數。 對象的創建 1.字面量方法 var myObj = {}; 2.構造函數 內置構造函數 Object() var newObj = new Object(); 缺點:使用同一個接口創建對象,會產生大量的重復代碼。 3.工廠模式 工廠模式抽象了對象創建過程,也就是把一個對象的創建過程封裝到一個函數里。實例如下所示: function createPerson(name,age,sex) { var o = new Object(); o.name = name; o.age ? ?= age; o.sex ? ? = sex; o.sayName = function() { alert(this.name); } return o; } var user1 = createPerson("cqs",11,"男"); 工廠模式的缺點: 1.空間沒有得到優化,從而降低了性能,產生資源浪費。 2.沒有new的過程,語義性不好。 3.工廠模式并沒有解決對象識別問題,也就是并不知道創建的對象屬于那種特定類型的對象。 4.構造模式 通過自定義構造函數創建特定類型的對象。 構造函數實例化過程,調用構造函數創建對象會經歷幾個過程,如下所示: new的原理 1.創建一個新的對象 2.將構造函數的作用域賦給新對象,所以這個時候this就指向新的對象 3.執行構造函數中的代碼(即為新對象添加屬性) 4.返回新對象 var Person = function(name,age,sex){ this.sex = sex; this.age = age; this.sex ?= sex; } var user1 = new ?Person("cqs",11,"男"); 備注:根據約定構造函數第一個單詞的開頭字母要大寫。 與工廠模式的不同 1.沒有顯示的創建對象; 2.直接將屬性和方法賦給新對象(this); 3.沒有return語句。 構造函數模式的缺點: 在每次實例化對象過程中,方法都要被重新創建,在JavaScript中函數方法也是對象,因此沒創建一個函數,也就是實例化一個對象。這樣必然導致消耗內存。可以通過原型模式來解決這種問題。 5.原型模式 描述原型
每一個函數都有一個prototype(原型)屬性,這個屬性是一個指針,指向一個對象,這個對象的用途是包含了可以由特定類型的所有實例共享的屬性和方法。如果按照字面意思來解釋,那么prototype就是通過調用構造函數而創建那個對象實例的原型對象。使用原型的好處就是能夠讓它的所有對象實例都能夠共享它的屬性和方法(也是不好的地方)。換句說,就是不必在構造函數中定義實例化對象的信息,而是將這些信息直接添加到原型對象中。 原型實例,如下所示: function person(){
?};
?person.prototype.name = "cqs";
?person.prototype.age = 11;
?person.prototype.sex = "男";
?person.prototype.method = function() {
? ? ? alert(this.age);
}
?var user1 = new person();
?var user2 = new person();
?user1.method();
?console.log(user1 == user2); 詳解:實例化對象user1和user2訪問的是同一組屬性和方法。 備注:創建一個新函數,就會根據特定規則為這個函數創建一個prototype屬性,這個屬性指向函數的原型對象。 6.混合模式----》構造函數模式+原型模式 通過構造函數定義實例屬性,通過原型定義方法和共享屬性,如下所示: function createObj(name,age,sex) { this.name = name; this.age = age; this.sex = sex; } createObj.prototype.method = function() { alert(this.name); } var user1 = new createObj("cqs",11,"男") 7.面向對象繼承 將原型鏈作為實現繼承的主要方法,其基本思路就是利用原型讓一個引用類型繼承另一個引用類型的方法和屬性。 概念:每個構造函數都有一個原型對象
每一個函數都有一個prototype(原型)屬性,這個屬性是一個指針,指向一個對象,這個對象的用途是包含了可以由特定類型的所有實例共享的屬性和方法。如果按照字面意思來解釋,那么prototype就是通過調用構造函數而創建那個對象實例的原型對象。使用原型的好處就是能夠讓它的所有對象實例都能夠共享它的屬性和方法(也是不好的地方)。換句說,就是不必在構造函數中定義實例化對象的信息,而是將這些信息直接添加到原型對象中。 原型實例,如下所示: function person(){
?};
?person.prototype.name = "cqs";
?person.prototype.age = 11;
?person.prototype.sex = "男";
?person.prototype.method = function() {
? ? ? alert(this.age);
}
?var user1 = new person();
?var user2 = new person();
?user1.method();
?console.log(user1 == user2); 詳解:實例化對象user1和user2訪問的是同一組屬性和方法。 備注:創建一個新函數,就會根據特定規則為這個函數創建一個prototype屬性,這個屬性指向函數的原型對象。 6.混合模式----》構造函數模式+原型模式 通過構造函數定義實例屬性,通過原型定義方法和共享屬性,如下所示: function createObj(name,age,sex) { this.name = name; this.age = age; this.sex = sex; } createObj.prototype.method = function() { alert(this.name); } var user1 = new createObj("cqs",11,"男") 7.面向對象繼承 將原型鏈作為實現繼承的主要方法,其基本思路就是利用原型讓一個引用類型繼承另一個引用類型的方法和屬性。 概念:每個構造函數都有一個原型對象
轉載于:https://www.cnblogs.com/blsm/p/6617549.html
總結
以上是生活随笔為你收集整理的JavaScript-面向对象详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信息摸块安装步骤
- 下一篇: 整形数组按照频率排序