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