一:理解对象属性

  对象有两种属性:数据属性和访问器属性。

  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:面向对象的程序设计相关推荐

  1. JavaScript 面向对象的程序设计1

    一.理解对象 1.创建一个对象,然后给这个对象新建属性和方法. ①常见的创建方式 var person = new Object(); //创建一个Object 对象person.name = 'XI ...

  2. javascript高级程序设计第3版——第6章 面向对象的程序设计

    第六章--面向对象的程序设计 这一章主要讲述了:面向对象的语言由于没有类/接口情况下工作的几种模式以及面向对象语言的继承: 模式:工厂模式,构造函数模式,原型模式 继承:原型式继承,寄生式继承,以及寄 ...

  3. 《JavaScript面向对象精要》读书笔记

    JavaScript(ES5)的面向对象精要 标签: JavaScript 面向对象 读书笔记 2016年1月16日-17日两天看完了<JavaScript面向对象精要>(参加异步社区的活 ...

  4. javascript面向对象系列第一篇——构造函数和原型对象

    前面的话 一般地,javascript使用构造函数和原型对象来进行面向对象编程,它们的表现与其他面向对象编程语言中的类相似又不同.本文将详细介绍如何用构造函数和原型对象来创建对象 构造函数 构造函数是 ...

  5. 《JavaScript面向对象编程指南》——第1章 引言1.1 回顾历史

    本节书摘来自异步社区<JavaScript面向对象编程指南>一书中的第1章,第1.1节,作者: [加]Stoyan Stefanov 译者: 凌杰 更多章节内容可以访问云栖社区" ...

  6. 面向对象的程序设计——理解对象

    面向对象的程序设计 ECMA-262 把对象定义为:无须属性的集合,其属性可以包含基本值.对象或者函数. 理解对象 var person = new Object(); //创建对象 person.n ...

  7. Javascript 面向对象全新理练之数据的封装

    JavaScript 是一种非常灵活的面向对象程序设计语言,它与传统的强类型的面向对象程序设计语言(如 C++,Java,C# 等)有很大不同,所以要实现如 C++.java.C# 当中的一些特性就需 ...

  8. 《JavaScript面向对象的编程指南》--读书笔记

    第一章.引言 1.5 面向对象的程序设计常用概念 对象(名词):是指"事物"在程序设计语言中的表现形式. 这里的事物可以是任何东西,我们可以看到它们具有某些明确特征,能执行某些动作 ...

  9. JS面向对象的程序设计之继承-继承的实现-借用构造函数

    JS面向对象的程序设计之继承-继承的实现-借用构造函数 前言:最近在细读Javascript高级程序设计,对于我而言,中文版,书中很多地方翻译的差强人意,所以用自己所理解的,尝试解读下.如有纰漏或错误 ...

最新文章

  1. C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(ubuntu g++)——插入
  2. hadoop定位文件读取
  3. python 调试器之pdb
  4. Knative 基本功能深入剖析:Knative Serving 的流量灰度和版本管理
  5. 强大的Mockito测试框架(转)
  6. 应用上下文webApplicationContext
  7. java生成验证码并进行验证
  8. 一年级学情分析计算机,小学一年级语文学情分析范文
  9. 环形博弈 HDU - 3951
  10. PostgreSQL从未授权到高权限命令执行
  11. Effictive Java学习笔记1:创建和销毁对象
  12. 二年级孩子适合学C语言吗,小孩子适合学习编程吗?孩童时期对变成的接受程度有多少呢?...
  13. red5流媒体服务器系统,red5流媒体服务器
  14. AutoCAD.Net 实现创建wipeout遮罩实体
  15. 百度AI 开放平台API调用
  16. cas单点登录配置,Java导入证书失败Keystore was tampered with, or password was incorrect
  17. 爬取猫眼电影评论及数据分析(三)之数据可视化
  18. 顶级黑客泄密事件啼笑皆非
  19. android 图片叠加xml,Drawable子类之——LayerDrawable (图层叠加)
  20. WebLogic 10.3.1 下载地址

热门文章

  1. golang函数多值返回示例
  2. K8S 利用Rinetd实现Service负载均衡
  3. maven pom指定jdk版本及utf-8字符编码
  4. Python爬虫开发:https请求加密问题解决
  5. Hadoop hdfs 使用流来上传文件代码示例
  6. Python Django URL传参代码示例
  7. Linux零拷贝的原理
  8. Linux centos7安装Git及 Jenkins配置Git
  9. IDEA手动添加jar包
  10. idea 拉取分支代码