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:面向对象的程序设计相关推荐
- JavaScript 面向对象的程序设计1
一.理解对象 1.创建一个对象,然后给这个对象新建属性和方法. ①常见的创建方式 var person = new Object(); //创建一个Object 对象person.name = 'XI ...
- javascript高级程序设计第3版——第6章 面向对象的程序设计
第六章--面向对象的程序设计 这一章主要讲述了:面向对象的语言由于没有类/接口情况下工作的几种模式以及面向对象语言的继承: 模式:工厂模式,构造函数模式,原型模式 继承:原型式继承,寄生式继承,以及寄 ...
- 《JavaScript面向对象精要》读书笔记
JavaScript(ES5)的面向对象精要 标签: JavaScript 面向对象 读书笔记 2016年1月16日-17日两天看完了<JavaScript面向对象精要>(参加异步社区的活 ...
- javascript面向对象系列第一篇——构造函数和原型对象
前面的话 一般地,javascript使用构造函数和原型对象来进行面向对象编程,它们的表现与其他面向对象编程语言中的类相似又不同.本文将详细介绍如何用构造函数和原型对象来创建对象 构造函数 构造函数是 ...
- 《JavaScript面向对象编程指南》——第1章 引言1.1 回顾历史
本节书摘来自异步社区<JavaScript面向对象编程指南>一书中的第1章,第1.1节,作者: [加]Stoyan Stefanov 译者: 凌杰 更多章节内容可以访问云栖社区" ...
- 面向对象的程序设计——理解对象
面向对象的程序设计 ECMA-262 把对象定义为:无须属性的集合,其属性可以包含基本值.对象或者函数. 理解对象 var person = new Object(); //创建对象 person.n ...
- Javascript 面向对象全新理练之数据的封装
JavaScript 是一种非常灵活的面向对象程序设计语言,它与传统的强类型的面向对象程序设计语言(如 C++,Java,C# 等)有很大不同,所以要实现如 C++.java.C# 当中的一些特性就需 ...
- 《JavaScript面向对象的编程指南》--读书笔记
第一章.引言 1.5 面向对象的程序设计常用概念 对象(名词):是指"事物"在程序设计语言中的表现形式. 这里的事物可以是任何东西,我们可以看到它们具有某些明确特征,能执行某些动作 ...
- JS面向对象的程序设计之继承-继承的实现-借用构造函数
JS面向对象的程序设计之继承-继承的实现-借用构造函数 前言:最近在细读Javascript高级程序设计,对于我而言,中文版,书中很多地方翻译的差强人意,所以用自己所理解的,尝试解读下.如有纰漏或错误 ...
最新文章
- C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(ubuntu g++)——插入
- hadoop定位文件读取
- python 调试器之pdb
- Knative 基本功能深入剖析:Knative Serving 的流量灰度和版本管理
- 强大的Mockito测试框架(转)
- 应用上下文webApplicationContext
- java生成验证码并进行验证
- 一年级学情分析计算机,小学一年级语文学情分析范文
- 环形博弈 HDU - 3951
- PostgreSQL从未授权到高权限命令执行
- Effictive Java学习笔记1:创建和销毁对象
- 二年级孩子适合学C语言吗,小孩子适合学习编程吗?孩童时期对变成的接受程度有多少呢?...
- red5流媒体服务器系统,red5流媒体服务器
- AutoCAD.Net 实现创建wipeout遮罩实体
- 百度AI 开放平台API调用
- cas单点登录配置,Java导入证书失败Keystore was tampered with, or password was incorrect
- 爬取猫眼电影评论及数据分析(三)之数据可视化
- 顶级黑客泄密事件啼笑皆非
- android 图片叠加xml,Drawable子类之——LayerDrawable (图层叠加)
- WebLogic 10.3.1 下载地址