资讯专栏INFORMATION COLUMN

js原型链2

khs1994 / 1741人阅读

摘要:系列文章原型链原型链代码如下内存分析图如下三个疑问。的对象在找不到属性或函数时,会继续从原型中找。这是原型链的基本机制。第三个问题,中,因为是调的,也就是,由于中没有属性,所以返回。这里涉及的知识虽然简单,但是整个的基础。

系列文章

js原型链1
js原型链2

代码如下:
var person = function(name){
this.name = name
};

person.prototype.getName = function(){
 return this.name; 
}

var zzz = new person("zzz");
console.log(zzz.getName()); // zzz
console.log(zzz.__proto__.getName());// undefined
内存分析图如下:

三个疑问。
1. zzz.__ptoto__.getName()是undefined?
2. zzz.getName()有值?
3. zzz中没有getName函数,为什么可以直接调用啊?
分析问题

下面对这三个问题进行一一解答:
首先说第三个。js的对象在找不到属性或函数时,会继续从原型中找。也就是zzz中没有getName函数,但会从person的prototype中找,找到后,调用getName,由于是zzz.getName(),所以getName中的this依然是zzz,所以this.name是有值的。这是原型链的基本机制。

那么第二个问题也就知道了。

第三个问题,zzz.__proto__.getName()中,因为是zzz.__proto__调的getName,也就是person.prototype.getName,由于person.prototype中没有name属性,所以返回undefined。

这里涉及的知识虽然简单,但是整个js的基础。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/81697.html

相关文章

  • 从实现角度分析js原型

    摘要:从实现角度分析原型链欢迎来我的博客阅读从实现角度分析原型链网上介绍原型链的优质文章已经有很多了,比如说作为补充,就让我们换个角度,从实现来分析一下吧本文假设你对原型链已经有所了解。 从实现角度分析js原型链 欢迎来我的博客阅读:《从实现角度分析js原型链》 网上介绍原型链的优质文章已经有很多了,比如说: https://github.com/mqyqingfeng/Blog/issu...

    CompileYouth 评论0 收藏0
  • JS基础-原型原型真的不能一知半解

    摘要:原型链和对象的原型是对象实例和它的构造函数之间建立的链接,它的值是构造函数的。对象的原型根据上文提到的构造调用函数的时候会创建一个新对象,自动将的原型指向构造函数的对象。 showImg(https://segmentfault.com/img/remote/1460000020185197); JS的原型、原型链一直是比较难理解的内容,不少初学者甚至有一定经验的老鸟都不一定能完全说清...

    changfeng1050 评论0 收藏0
  • js原型 原型 原型的继承

    摘要:图片描述缺点是无法实现多继承可以在构造函数中,为实例添加实例属性。 对象的方法 Object.assign() 对象可以简写 ,如果 key 和 value 相等则可以简写 let name = xm; let age = 2; let obj = { name, age, fn(){ // 可以省略函数关键字和冒号: console.log(2...

    soasme 评论0 收藏0
  • 理解js原型与继承

    摘要:相当于在用原型继承编写复杂代码前理解原型继承模型十分重要。同时,还要清楚代码中原型链的长度,并在必要时结束原型链,以避免可能存在的性能问题。 js是一门动态语言,js没有类的概念,ES6 新增了class 关键字,但只是语法糖,JavaScript 仍旧是基于原型。 至于继承,js的继承与java这种传统的继承不一样.js是基于原型链的继承. 在javascript里面,每个对象都有一...

    wthee 评论0 收藏0
  • js细节剖析】通过"="操作符为对象添加新属性时,结果会受到原型上的同名属性

    摘要:在使用的过程中,通过操作符为对象添加新属性是很常见的操作。但是,这个操作的结果实际上会受到原型链上的同名属性影响。通过它,可以做到操作符做不到的事情,比如为对象设置一个新属性,即使它的原型链上已经有一个的同名属性。 在使用JavaScript的过程中,通过=操作符为对象添加新属性是很常见的操作:obj.newProp = value;。但是,这个操作的结果实际上会受到原型链上的同名属性...

    wemallshop 评论0 收藏0
  • 你是否理解js的Object与Function与原型

    摘要:原型对象是由创建的,因此原型对象的构造函数是构造函数也可以是称为对象,原型对象也就继承了其生父构造函数中的数据,也同时继承了原型对象的数据。当然这条原型链中的数据,会被还是还是这类构造函数继承,但是不会被这些继承,他们不处于同一个链条上。 js中,Function的本质是什么?Object的本质又是什么?js中有几条原型链? showImg(https://segmentfault.c...

    itvincent 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<