浅谈JavaScript对象的原型prototype
前提:
在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相关推荐
- 浅谈JavaScript中的原型prototype
之前看过一些关于原型的知识,但总是看了以后没有及时应用,导致再看到一些代码是遇到还是搞不清楚,借此机会谈一下我对prototype的理解. 1.再谈原型之前,我们要知道什么是构造器函数,型如下例: f ...
- 浅谈JavaScript继承与原型链
对于使用过基于类的语言(如java或C++)的开发人员来说,JavaScript有点令人困惑,因为它是动态的,并且本身不提供一个class实现. 在(es5/es6)中引入class关键字,但那只是语 ...
- 浅谈javascript中原型(prototype)、构造函数、对象实例及三者之间的关系
转自:http://www.cnblogs.com/zhangwei412827/archive/2012/12/14/2816263.html 浅谈javascript中原型(prototype). ...
- JavaScript -- 对象与原型链 [[Prototype]]
一.第三章:对象 1.属性描述符(数据描述符) 可以使用 Object.getOwnPropertyDescriptor( myObject, "a" ); 获取myObject对 ...
- JavaScript 中的 require / exports、import / export、浅谈JavaScript、ES5、ES6
Node.js 的基础教学 之 exports 和 module.exports:https://zhuanlan.zhihu.com/p/82057593 浅谈 JavaScript.ES5.ES6 ...
- 浅谈JavaScript作用域,关于Java的学习路线资料
javascript是目前web领域中使用非常广泛的语言,不管是在前端还是在后端都能看到它的影子,可以说web从业者不论怎样都绕不开它.在前端领域,各种框架层出不穷.在后端领域,nodejs可谓如火如 ...
- 浅谈 JavaScript 编程语言的编码规范--转载
原文:http://www.ibm.com/developerworks/cn/web/1008_wangdd_jscodingrule/ 对于熟悉 C/C++ 或 Java 语言的工程师来说,Jav ...
- 浅谈 JavaScript 编程语言的编码规范
转自:http://www.ibm.com/developerworks/cn/web/1008_wangdd_jscodingrule/?ca=drs-tp4608 developerWorks 中 ...
- java对象头_浅谈java对象结构 对象头 Markword
概述 对象实例由对象头.实例数据组成,其中对象头包括markword和类型指针,如果是数组,还包括数组长度; | 类型 | 32位JVM | 64位JVM| | ------ ---- | ----- ...
最新文章
- 从源码理解Redux和Koa2的中间件机制
- Redis发布与订阅(pub/sub)
- 学习Bootstrap知识记录点-----导航菜单操作
- Java中Socket通信-服务端和客户端双向传输字符串实现
- 关于Expdp/Impdp 并行导入导出详细测试结果和并行参数的正确理解!!
- 下载,安装 Source Navigator(ubuntu 14.04)
- Doxygen for C++使用说明——注释代码一
- 牛客练习赛70 	重新排列
- 前端项目难点及解决方法_预埋件施工重点难点的解决方法
- QML工作笔记-2种输入框的使用(TextField与TextInput)
- go语言函数的常用用法
- [POJ 2503] Babelfish【二分查找】
- Source Insight 中查看日文注释
- java netty rpc框架_Java编写基于netty的RPC框架
- LINUX下载编译libav
- plc编程语言是c语言吗,PLC各种编程语言特点你了解多少?
- 安川焊接机器人做圆弧运动编程_安川MOTOMAN工业机器人编程与操作(6)
- oracle 数值加减乘除
- Android软键盘与界面内容的坑
- 应试教育---幸好我们还有一张考卷
热门文章
- C# FileStream和StreamReader以及StreamWriter
- Spoken English Practice(I'm gonna do something I never thought I'd be able to)
- 收藏的技术资料下载网址
- HTML_hao123
- 产品经理需要具备哪些素质?
- 【Unity】 HTFramework框架(十九)ILHotfix热更新模块
- 西北乱跑娃 --- opencv泛洪填充学习笔记
- 电脑抢票软件-电脑自动化订票软件开发
- 视频批量转GIF工具V1.3免费版
- 心雨中调用Discuz论坛IE6中代码出现乱码