总的来说js语言就是门面向对象编程的语言,对象这个概念几乎贯穿了整个js的学习。

  对象

  创建对象两种方法:(若要生成对象实例必须调用构造函数)

    1、var obj = {name:"jer" , age:12};(在js内部调用了预设的Object()构造函数)

      访问:alert(obj.name);//"jer"

         alert(obj["name"]);//"jer"

    2、var obj = new Object();

      obj.name="jer";   

                       

        打印结果:

        

         1>上述就是通过原型链遍历出来object构造函数的原型对象属性和方法

         2> prototype指定了这个构造函数实例继承了哪个对象(实例)

         3> obj.Object.prototype就可以访问到这个继承对象下的属性

       4>_proto_:原型链接点,是实例的属性。它的值是由prototype决定的,修改Prototype的值可以操作这个原型链的指向。

  重点说第二个方法:

    var obj = new Object();

    //Object()是一个构造函数

    //obj是这个构造函数的一个实例

    //这个构造函数还可以有更多实例:var obj1 = new Object(); var obj2 = new Object();

      //obj1和obj2的特性:

        1、共同继承了Object()这个构造函数的方法及属性(object是所有对象的基本类型。所以这就是为什么很多对象有着共同的继承属性);

          

        2、修改obj1实例的构造函数的属性不会影响obj2的那个属性(从构造函数那里获取来的属性变成了这个实例的属性,修改每个实例上的属性,不会互相影响

             

        3、它俩有着共同的原型对象:Object.prototype

            

          4、修改obj1的原型属性不会影响obj2

          

          5、原型里方法的this指向这个构造函数的实例对象

          

      //通过打印更好理解:

        

        打印结果:

        

        第一个原型链指向了Per的原型对象,这个原型对象包括两个属性和一个继承的原型对象,这个对象就是Object实例(也可以说是Object构造函数的属性及方法)

      Per.prototype.constructor返回的是构造函数,per1.prototype返回undefined,因为prototype是构造函数的属性

      constructor是原型对象的属性,用来指向构造函数

      //还有一种封装prototype对象属性的写法,这个写法是重新编写了原型对象:

          

          在实例之后添加这种写法,实例访问不到原型对象的属性

          下面这个例子是在重写原型对象之前创建的实例:

        

          打印

          

          因为实例上面没有给属性,所以直接向上查找打印出来构造函数的属性,打印的内容包括构造函数内定义的属性和原型链上的属性

          展开

          

          原型链上的属性有原型对象属性name和内置属性constructor(指向构造函数)还有个继承的Object实例

          constructor指代的构造函数包含函数自身的属性和重新定义的原型对象(prototype属性),应为是在原型链上重新封装了原型对象,这个新原型对象也会继承Object

        重点:后面两个打印的都返回undefined

        第一个undefined是因为,实例在重写的原型对象之前定义的,重写原型对象就意味着切断了实例和本来的原型之间的联系,实例继承不到新原型对象的属性

        第二个undefined是因为,prototype是构造函数的属性

      重写:将新建实例放到重写原型对象下面

        

        打印:

          

          因为实例是在重写原型对象之后定义的,所以实例能够访问到新原型对象里的属性。还有个有意思的是,这个实例继承的构造函数的原型里面只有重写的原型对象的属性,Per.prototype.name="cuz";访问不到。

        实例若是能继承重新封装构造函数的原型对象,那么它的原型属性只在这个对象里

    //深入理解构造函数:

      先来看个例子:

      

        打印

        

      从上述例子提取到的知识点有:

        1、用构造函数名字新创建的属性没有用。

       2、设置原型函数的属性语句放在函数里面还是外面同样有效

       3、实例新建属性放置在创建实例之后也还是会被访问到,(因为是全局属性,虽然start方法是在第一个打印的实例之后调用的)

     

    这些知识框架无所谓对象,对象里包含属性方法,这个属性方法又包含对象,对象又...每个属性方法又有不同的知识结构,然后各种访问调用各种特性,组成了js编程的一张大网,不要忘了函数其实也是个对象。构造函数和其他函数没有区别,只是用来生成对象实例。

      

      

        

        

        

    

转载于:https://www.cnblogs.com/Grace-zyy/p/8136975.html

快速理解JavaScript面向对象编程—原型相关推荐

  1. 如何通俗的理解javascript面向对象编程?

    如何通俗的理解javascript面向对象编程? 1.面向对象的简单认识 2.理解类的概念 创建类的二种常见的方式 3.判断类的区别 4.三种创建实例的方法

  2. JavaScript 面向对象编程(二) —— 构造函数 / 原型 / 继承 / ES5 新增方法

    本篇为 JavaScript 进阶 ES6 系列笔记第二篇,将陆续更新后续内容.参考:JavaScript 进阶面向对象 ES6 :ECMAScript 6 入门 : Javascript 继承机制的 ...

  3. javascript 面向对象编程(工厂模式、构造函数模式、原型模式)

    javascript 面向对象编程(工厂模式.构造函数模式.原型模式) CreateTime--2018年3月29日17:09:38 Author:Marydon 一.工厂模式 /*** 工厂模式*/ ...

  4. JavaScript面向对象编程-第三版不完全系统解读

    JavaScript面向对象编程-第三版不完全系统解读 作者:老九-技术大黍 产品:查看原文 社交:知乎 公众号:老九学堂(新手有福利) 特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系笔者 ...

  5. 浅谈JavaScript 面向对象编程[转]

    这周心血来潮,翻看了现在比较流行的几个 JS 脚本框架的底层代码,虽然是走马观花,但也受益良多,感叹先人们的伟大-- 感叹是为了缓解严肃的气氛并引出今天要讲的话题,"javascript 面 ...

  6. JavaScript 面向对象编程(三) —— 函数进阶 / 严格模式 / 高阶函数 / 闭包 / 浅拷贝和深拷贝

    本篇为 JavaScript 进阶 ES6 系列笔记第三篇,将陆续更新后续内容.参考:JavaScript 进阶面向对象 ES6 :ECMAScript 6 入门 系列笔记: JavaScript 面 ...

  7. JavaScript 面向对象编程思想简介

    JavaScript 面向对象编程 JavaScript 执行过程 JavaScript 面向对象编程 面向对象介绍 什么是对象 什么是面向对象 程序中面向对象的基本体现 创建对象 简单方式 简单方式 ...

  8. javascript 面向对象编程(封装、继承)

    在面向对象编程中,类(class)是对象(object)的模板,定义了同一组对象(又称"实例")共有的属性和方法. Javascript语言不支持"类",但是可 ...

  9. Javascript面向对象编程思考与总结

    Javascript面向对象编程 什么是对象?万物皆对象 -对象:特指的某个事物,具有属性和方法(一组无序的属性的集合) 特征:-----> 属性 行为:----->方法 对象是单个事物的 ...

最新文章

  1. 数据上报痛点解决方案
  2. pat(基本编程题集)6-2 多项式求值 (15 分)
  3. 迅雷/快车/旋风地址转换器
  4. Atitit.sql where条件表达式的原理  attilax概括
  5. 嵌入式开发与单片机开发有什么区别
  6. VC++2010Express下载
  7. Nifi操作Redis
  8. 斐讯路由怎么设置虚拟服务器,192.168.2.1斐讯路由器设置的方法?
  9. diy 文件服务器,文件服务器diy
  10. 详解事务的7种传播行为
  11. 2023年全国最新二级建造师精选真题及答案49
  12. 前端基础教程:简单的实现html+css+javascript点赞效果
  13. PHP处理base64编码字符串
  14. mysql的题目_mysql经典例题
  15. Linux 文件名和路径的最大长度
  16. 江西省南昌市谷歌高清卫星地图下载(百度网盘离线包下载)
  17. 绘图基础--画弧,扇形,弓形
  18. 数据中心UPS不间断电源系统架构介绍
  19. Java 中的大根堆和小根堆
  20. 分享QQ空间营销秘籍

热门文章

  1. 干货 | AI 工程师必读,从实践的角度解析一名合格的AI工程师是怎样炼成的
  2. 迈吉客受邀参加《创意中国》, 85%超高支持率晋级年度盛典
  3. 深入理解Linux I/O系统
  4. 面霸:Redis 为什么这么快?
  5. 面试官扎心一问:数据量很大,分页查询很慢,有什么优化方案?
  6. 特征工程学习,19项实践Tips!代码已开源!
  7. 一文梳理2019年腾讯广告算法大赛冠军方案
  8. TensorFlow2.0 系列开篇: Windows下GPU版本详细安装教程
  9. 语言模型也不能乱说话!DeepMind发布GopherCite:讲话必须带证据
  10. 229页,CMU博士张浩毕业论文公布,探索机器学习并行化的奥秘