前提:

在JavaScript中一切皆对象,分为普通对象和函数对象,每个对象都有原型(undefined和null没有原型,所以undefined和null也就没有toSting方法)。

Object:Object是一个函数对象,Object的原型就是Object。prototype,它里面存在着一些对象的方法和属性,例如最常见的toString方法。

普通对象:用new Object或者{}建的对象是普通对象,它没有prototype属性,只有__proto__属性,它指向Object.prototype。

Array:Array也是一个函数对象,它的原型就是Array.prototype,它里面存在着一些数组的方法和属性,例如常见的push,pop等方法。

Function:Function也是一个函数对象,它的原型就是一个function空函数。

自定义函数:它的原型就是你给指定的内容。如果不指定,那它的原型就是一个Object.prototype,例:function Test(){}; Test.prototype = {name:"张三"};var test = new Test();此时Test的原型就是Test.prototype 。

1.prototype定义:

原型是function对象的一个属性,它定义了构造函数制造出来的对象的公共祖先。通过该构造函数产生的对象,可以继承该原型的属性和方法。原型也是对象。

对象的原型:__proto__

注:对象分为function1对象和Object对象,每个对象都有原型(null和undefined除外,unll和undefind不可以用toString方法)

例1:person和person1它们的共有祖先为Person.prototype

function Person (){}var person = new Person();var person1 = new Person();

例2:自己身上有属性,原型上也有属性,取自己身上的,就近原则

Person.prototype.name = "张三";function Person (){this.name = "李四"}var person = new Person();console.log(person.name) //--->李四

例3:可以通过对象改变自己的属性,但是对原型无效,原型属性不可以被对象修改。

例4:请关注属性颜色,浅紫色是系统设置的属性,深紫色是自己设置的属性,__proto__是系统隐式的属性,可以改,但是尽量别改,一般这样的命名代表不希望被修改,例如:_private

注:当你访问一个对象属性时,如果这个对象没有这个属性,就会访问proto这个索引,查找proto里是否有你想要的属性。

有构造函数的情况,每当执行到new关键词时,会在最前面隐式执行var this = {__proto__:Person.prototype}

最后隐式执行 return this

例5:当执行 Person.prototype = {name:"李四"}时,person 已经被定义并且构造了对象,即已经new了,此时person.name继承的是构造函数Person.prorotype.name,所以后定义的Person.prototype = {name:""}还没有覆盖原来的Person.prototype.name ,因此,执行结果为:张三

Person.prototype.name = "张三";function Person (){//var this = {__proto__:Person.prototype}   隐式执行// this.name = "李四"}var person = new Person();Person.prototype = {name : "李四"}console.log(person.name)

例6:Person.prototype.name = "小刘",这种写法是在原来的对象上改变属性值,Person.prototype = {name:"李四"},这种写法是把原型改了,换了个新对象,如下代码,Person.prototype.name = "小刘" 是把原来的“张三”改成了“小刘”,而Person.prototype = {name:"李四"}保留原来的Person.prototype.name = "张三",同是又新健了一个同名对象为Person.prototype.name,这个的是是“李四”

Person.prototype.name = "张三";function Person (){//var this = {__proto__:Person.prototype}   隐式执行// this.name = "李四"}Person.prototype.name = "小刘"var person = new Person();Person.prototype = {name : "guojia"}console.log(person.name)

浅谈JavaScript对象的原型prototype相关推荐

  1. 浅谈JavaScript中的原型prototype

    之前看过一些关于原型的知识,但总是看了以后没有及时应用,导致再看到一些代码是遇到还是搞不清楚,借此机会谈一下我对prototype的理解. 1.再谈原型之前,我们要知道什么是构造器函数,型如下例: f ...

  2. 浅谈JavaScript继承与原型链

    对于使用过基于类的语言(如java或C++)的开发人员来说,JavaScript有点令人困惑,因为它是动态的,并且本身不提供一个class实现. 在(es5/es6)中引入class关键字,但那只是语 ...

  3. 浅谈javascript中原型(prototype)、构造函数、对象实例及三者之间的关系

    转自:http://www.cnblogs.com/zhangwei412827/archive/2012/12/14/2816263.html 浅谈javascript中原型(prototype). ...

  4. JavaScript -- 对象与原型链 [[Prototype]]

    一.第三章:对象 1.属性描述符(数据描述符) 可以使用 Object.getOwnPropertyDescriptor( myObject, "a" ); 获取myObject对 ...

  5. JavaScript 中的 require / exports、import / export、浅谈JavaScript、ES5、ES6

    Node.js 的基础教学 之 exports 和 module.exports:https://zhuanlan.zhihu.com/p/82057593 浅谈 JavaScript.ES5.ES6 ...

  6. 浅谈JavaScript作用域,关于Java的学习路线资料

    javascript是目前web领域中使用非常广泛的语言,不管是在前端还是在后端都能看到它的影子,可以说web从业者不论怎样都绕不开它.在前端领域,各种框架层出不穷.在后端领域,nodejs可谓如火如 ...

  7. 浅谈 JavaScript 编程语言的编码规范--转载

    原文:http://www.ibm.com/developerworks/cn/web/1008_wangdd_jscodingrule/ 对于熟悉 C/C++ 或 Java 语言的工程师来说,Jav ...

  8. 浅谈 JavaScript 编程语言的编码规范

    转自:http://www.ibm.com/developerworks/cn/web/1008_wangdd_jscodingrule/?ca=drs-tp4608 developerWorks 中 ...

  9. java对象头_浅谈java对象结构 对象头 Markword

    概述 对象实例由对象头.实例数据组成,其中对象头包括markword和类型指针,如果是数组,还包括数组长度; | 类型 | 32位JVM | 64位JVM| | ------ ---- | ----- ...

最新文章

  1. 从源码理解Redux和Koa2的中间件机制
  2. Redis发布与订阅(pub/sub)
  3. 学习Bootstrap知识记录点-----导航菜单操作
  4. Java中Socket通信-服务端和客户端双向传输字符串实现
  5. 关于Expdp/Impdp 并行导入导出详细测试结果和并行参数的正确理解!!
  6. 下载,安装 Source Navigator(ubuntu 14.04)
  7. Doxygen for C++使用说明——注释代码一
  8. 牛客练习赛70 重新排列
  9. 前端项目难点及解决方法_预埋件施工重点难点的解决方法
  10. QML工作笔记-2种输入框的使用(TextField与TextInput)
  11. go语言函数的常用用法
  12. [POJ 2503] Babelfish【二分查找】
  13. Source Insight 中查看日文注释
  14. java netty rpc框架_Java编写基于netty的RPC框架
  15. LINUX下载编译libav
  16. plc编程语言是c语言吗,PLC各种编程语言特点你了解多少?
  17. 安川焊接机器人做圆弧运动编程_安川MOTOMAN工业机器人编程与操作(6)
  18. oracle 数值加减乘除
  19. Android软键盘与界面内容的坑
  20. 应试教育---幸好我们还有一张考卷

热门文章

  1. C# FileStream和StreamReader以及StreamWriter
  2. Spoken English Practice(I'm gonna do something I never thought I'd be able to)
  3. 收藏的技术资料下载网址
  4. HTML_hao123
  5. 产品经理需要具备哪些素质?
  6. 【Unity】 HTFramework框架(十九)ILHotfix热更新模块
  7. 西北乱跑娃 --- opencv泛洪填充学习笔记
  8. 电脑抢票软件-电脑自动化订票软件开发
  9. 视频批量转GIF工具V1.3免费版
  10. 心雨中调用Discuz论坛IE6中代码出现乱码