博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
原型继承
阅读量:6599 次
发布时间:2019-06-24

本文共 1551 字,大约阅读时间需要 5 分钟。

Javascript对象(如robot)拥有自有属性(如通过构造函数this.name=name设置的属性)和继承属性(例如代理自Robot.prototype的属性)两种。

在查询对象robot的属性age时,先查找robot中自有属性的age属性,如果没找到,则查找robot继承属性(也就是robot的原型对象:robot.__proto__)中的age属性,直到查找到age或者一个原型是null的对象为止.

在给对象robot的age属性赋值时,如果robot自有属性中已经有一个属性age,则改变age的值,若robot中不存在自有属性age,只存在继承属性age或者所有属性中都没有age属性,则为robot创建一个自有属性age并为其赋值.

也就是说,只有在查询时原型链才会起作用。赋值只针对自有属性.

var Robot = function(name) {        //声明一个构造函数                this.name = name;                this.say = function(){                            console.log(this.name) } }; var info = { age: 12, gender: "boy" }; Robot.prototype = info; var robot = new Robot("bower"); console.log(robot); //打印结果为Robot {name: "bower", say: function, age: 12, gender: "boy"} console.log('age' in robot); //打印结果为true console.log(robot.hasOwnProperty('age')); //打印结果为false robot.name = "cup"; robot.age = 13; console.log(robot); //打印结果为Robot {name: "bower", say: function, age: 12, gender: "boy"} console.log('age' in robot); //打印结果为true console.log(robot.hasOwnProperty('age')); //打印结果为true

可以使用in 或者 hasOwnProperty 来判断对象中是否存在属性或者是否存在自有属性。

function Robot(name){
this.name=name};var robot = new Robot("bower");console.log(robot.name);console.log(robot.age);Robot.prototype.age = 12; robot.name = "cup"; console.log(robot.name); console.log(robot.age);

上述代码的执行结果是?

 bower, undefined, cup, 12

非常正确!你太棒了!

当查询robot的age属性时,先查询自有属性,如果没有则查询原型对象的age属性,如果查询没有结果,则返回结果undefined.

在执行Robot.prototype.age = 12这句代码之前,在robot的所有属性中是没有age属性的.所以本句代码执行之后,原型对象中就可以查询到age属性了.

转载于:https://www.cnblogs.com/web-chuanfa/p/9358591.html

你可能感兴趣的文章
UVA 10453 十七 Make Palindrome
查看>>
CodeForces 432B Football Kit
查看>>
Linux Iscsi 安装和配置
查看>>
我的友情链接
查看>>
Windows Server 2012 R2 基于虚拟机的VDI部署
查看>>
ISTQB,QAI,软件评测师软件测试认证特点对比
查看>>
网络流24题3
查看>>
转:Java生成带有二维码图片的word文档
查看>>
程承熊LEE微购店的疑问
查看>>
xml和json的区别
查看>>
Valgrind: memcheck of memleak/mem-uninitialization; massif usage
查看>>
centos 学习总结
查看>>
Win10优化
查看>>
mysql导入sql文件
查看>>
杭电oj5253--连接的管道(KL)
查看>>
Cesium中级教程7 - Geometry and Appearances 几何图形和外观
查看>>
STL vector常用API
查看>>
《Hadoop权威指南·大数据的存储与分析》阅读笔记(未读完)
查看>>
【Android笔记】入门篇02:全屏设置和禁止横屏竖屏切换
查看>>
Android Studio设置字体和主题
查看>>