javascript
javascript:面向对象的程序设计 -凯发ag旗舰厅登录网址下载
一:理解对象属性
对象有两种属性:数据属性和访问器属性。
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
总结
以上是凯发ag旗舰厅登录网址下载为你收集整理的javascript:面向对象的程序设计的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得凯发ag旗舰厅登录网址下载网站内容还不错,欢迎将凯发ag旗舰厅登录网址下载推荐给好友。
- 上一篇:
- 下一篇: