javascript
javascript:面向对象的程序设计
一:理解對象屬性
對象有兩種屬性:數據屬性和訪問器屬性。
1)數據屬性
數據屬性有四個描述其行為的特性,[[configurable]] [[enumerable]] [[writable]] [[value]],修改屬性的特性使用Object.defineProperty
2)訪問器屬性
訪問器屬性包含一對getter和setter函數,有四個特性[[configurable]] [[enumerable]] [[get]] [[set]],修改屬性使用Object.defineProperty
獲取對象描述符:Object.getOwnPropertyDescriptor()
二:理解并創建對象
創建對象的方式,及各自的優缺點:
1)工廠方式
function person(name,age){var o = new Object();o.name=name,o.age=age,return o}
person1 = person('dd',12);
person2=person('ss',13);
缺點:當創建多個相似對象時,會創建多個object實例
2)自定義構造函數
function Person(name,age){this.name=name; this.age=age ; ?this.sayName:function(){ return name; }}
person1 = new Person('dd',12);
person2= new Person('ss',13);
優點:創建自定義的構造函數意味著可以將它的實例標注為特定的類型,而不是統一的Object類型。自定義的構造函數是屬于全局window對象的,可以使用函數對象的apple和call方法,擴展作用域。
缺點:每創建一個實例,就重新創建對象的每個方法。
3)原型模式
每個函數都有一個prototype屬性,prototype是一個指針,指向一個對象,這個對象包含著特定類型對象共享的所有屬性和方法。
function Person(){}
Person.prototype.name = "dd";
Person.prototype.sayName = function(name){ return name}
var person1 = new Person();
var person2 = new Person();
更簡潔的寫法:
ps:這種寫法實際上重新定義了prototype,因此原型對象的constructor屬性指向了object,而不是person,
function Person(){}
Person.prototype = {
constructor:Person//指向Person
name:"dd",
sayName = function(name){ return name}
}
var person1 = new Person();
var person2 = new Person();
原型模式的工作原理:
每創建一個新函數,該函數的prototype屬性指向原型對象,原型對象有個屬性constructor(構造函數)指向包含prototype屬性的函數。
Person.prototype.constructor = Person
當使用構造函數創建實例后,實例的內部將包含一個指針(prototype屬性)指向構造函數的原型對象
確定實例與原型對象的關系:原型對象 isPrototypeOf(實例對象)
獲取一個對象的原型:Object.getPrototypeOf(實例)
對象.hasOwnProperty(),來判斷屬性是實例的,還是原型對象的。
缺點:1) 所有實例默認的共享的屬性值都是相同的。
2)原型中所有的屬性和方法都是被很多實例共享的,如果屬性值是引用類型,修改一個實例的屬性,就會修改原型對象中的屬性值,導致其他實例的該屬性值都會被修改。
4)組合使用構造函數和原型模式
三:理解繼承
繼承有接口繼承和實現繼承兩種,接口繼承由函數簽名來實現,實現繼承是繼承具體的實現方法。實現繼承主要依靠原型鏈來實現。基本思想是讓一個引用類型繼承另一個引用類型的屬性和方法,將原型對象作為另一個類型的實例。
每個構造函數都有一個屬性指向原型對象,原型對象也有個內部指針指向構造函數,每個實例也有屬性指向原型對象,如果原型對象是另一個對象的實例,則原型對象就可以指向另一個原型對象,就獲取到另一個原型對象的屬性和方法,從而實現了繼承。
轉載于:https://www.cnblogs.com/lingLongBaby/p/8550242.html
總結
以上是生活随笔為你收集整理的javascript:面向对象的程序设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 13年手动奇瑞风云2主驾驶座位可以上下调
- 下一篇: 六桂福珠宝保值率高吗?福韵系列好看吗?