通俗易懂解析JS原型与原型链

这次给大家带来通俗易懂解析js原型与原型链,解析js原型与原型链的注意事项有哪些,下面就是实战案例,一起来看一下。

Browser中的对象

浏览器中有哪些对象?ES中规定全局对象为global,而浏览器中规定全局对象为window。

在chrome控制台中输入window,我们就能看到window里有哪些内容。

下面的这些对象在window里都能找到。
如Object,Sring,Numbr,Boolean,Array,Date,Math,parseInt, parseFloat这些属性都是ES规定的必须有的对象。
如doucument,alert,prompt,atob等这些是浏览器中内置的属性。

这些对象都具有hash结构,如Object下,String下都有自己的属性和方法,都有相应的API调用。

简单类型和对象

例子如下:n1是简单类型,n2是对象。

var n1 = 'a'var n2 = new String('a')n1.lengthn1.hasOwnProperty('0')n2.lengthn2.hasOwnProperty('0')n1.xxx = 2n1.xxx // undefined

登录后复制

区别

n1值是存储在stack中。n2赋值时,stack中建立一个地址,指向heap中,堆内存中新建了一个String类型的对象。能看到对象n2里有一些属性,还有prototype属性。

属性

n2是对象,里面有length属性,所以调用。n1只是字符串,为何也有length属性

可以这样理解:n1.length时,这时js会进行如下操作:var temp = new String(n1);n1.length;也就是使用属性,或方法时,会临时的在堆内存中新建一个对象,这个对象是相应的String类型,执行后,temp便被销毁。因此n1.xxx = 2操作不会报错,而再次n1.xxx显示undefined,因为此时n1在堆内存中的数据已经销毁了。

因此,js中,很少使用new一个新对象的方法,而是直接对变量进行赋值。

n2中的hasOwnProperty()

hasOwnProperty()是Object类型中的方法,Sting类型下并没有找到它,在哪找到它?

这里hasOwnProperty()是在n2.proto.proto里面。n2.proto指向的是String.prototype,而String.prototype.proto最后指向Object.prototype。String是一种原型,Object也是一种原型。Object.prototype中存放了所有Object类型的公共属性。

以这种方式,能有效的节省空间,避免每个对象里面都记录很多的属性,一个object里没有的属性,就到proto指向的对象里面寻找。而指向的地方通常是某个原型的prototype。

去哪里找 proto和prototype

var n = new Number(1)var s= new String('1')var o= new Object()

登录后复制

以上几种方式都能看成 var 对象 = 函数()的形式。
归纳出,对象.proto =函数.prototype。

访问 proto

proto是相对于对象来说,找爸爸,看是谁生成的对象。对n来说,爸爸是Number,就去Number.prototype里面寻找。Number里也有proto,访问时,到它的爸爸Object里面寻找。

FunctionString.proto === Function.prototype //true

登录后复制

函数也能看作是对象,String,Object,Number都是对象,也都是函数。因为之前用到了new String(),所以这是函数,函数return结果的数据类型为object。String的爸爸便是Function。

Function.proto === Function.prototype //trueFunction.prototype.proto === Object.prototype //trueFunction.proto.proto === Object.prototype //true

登录后复制

当把函数Function看作是由Function方法生成的对象时,
即var Function = new Function()
便能理解 Function.proto === Function.prototype

Fuction的类型是function,它是由Function构造出来的。关系从上图可以看出来。new String()时,String的类型也是function,String.proto指向的就是Function.prototype。

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

JS中怎样避免特性与浏览器推断

JS门面模式使用案例详解

以上就是通俗易懂解析JS原型与原型链的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2750090.html

(0)
上一篇 2025年3月8日 05:30:59
下一篇 2025年3月8日 05:31:06

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 如何访问JS的对象属性与方法

    这次给大家带来如何访问JS的对象属性与方法,访问JS对象属性与方法的注意事项有哪些,下面就是实战案例,一起来看一下。 定义一个对象,然后用点运算符(.)来访问属性和方法。今天突然看见还有另外一种方法中括号运算符([]),就认真看了下。 va…

    2025年3月8日 编程技术
    200
  • 在AngularJS中如何动态添加数据并删除?

    下面我就为大家分享一篇angularjs动态添加数据并删除的实例,具有很好的参考价值,希望对大家有所帮助。 如下所示: nbsp;html>TodoListbody {padding: 0;margin: 0;}.todo {widt…

    编程技术 2025年3月8日
    200
  • 详细讲解JS严格模式知识点有哪些?

    本篇文章给大家整理了js严格模式下的相关知识点以及代码实例分享,感兴趣的一起学习下吧。 所谓严格模式其实就是一个不会赋值给任何变量的字符串 “use strict” 如果在全局作用域下 给出这个提示,那整个脚本将采用严格模式。也可以只在函数…

    编程技术 2025年3月8日
    200
  • 详细解读在js函数相关内容

    本篇文章给大家简要分析了js中函数相关的重要知识点,对此有兴趣的朋友可以参考学习下。 要知道,在js中,引用类型是一种数据结构,包含5种引用类型,分别是Object,data,Array,re请输入代码gExp,Function。今天我们就…

    编程技术 2025年3月8日
    200
  • 在Vue2.5中通过json文件读取数据的方法

    本文通过实例代码给大家详细介绍了vue2.5通过json文件读取数据的方法,非常不错,具有参考借鉴价值,需要的朋友参考下吧 1.准备工作 1.1 webpack.dev.conf.js 在 const portfinder = requir…

    编程技术 2025年3月8日
    200
  • JS基础函数使用简介

    这次给大家带来js基础函数使用简介,js基础函数使用的注意事项有哪些,下面就是实战案例,一起来看一下。 /** 函数*  – 函数也是一个对象*  – 函数中可以分钟一些功能(功能),在需要时可以执行这些功能(代码)*  – 函数中可以保存…

    编程技术 2025年3月8日
    200
  • js基础提升教学之变量

    这次给大家带来js基础提升教学之变量,js变量使用的注意事项有哪些,下面就是实战案例,一起来看一下。 一门正常的语言,函数前都属于基础部分 格式:var  变量名称=变量值;(在135版本,必须加声明,即严格模式) —&#821…

    编程技术 2025年3月8日
    200
  • js基础提升学习之基本数据类型

    这次给大家带来js基础提升学习之基本数据类型,使用js基本数据类型的注意事项有哪些,下面就是实战案例,一起来看一下。 javascript的数据类型分为两大类型: 1、基本数据类型:       字符串(String)       数字(N…

    编程技术 2025年3月8日
    200
  • 在Angular.js中使用Swiper插件如何解决不能滑动的问题

    下面我就为大家分享一篇解决angular.js中使用swiper插件不能滑动的问题,具有很好的参考价值,希望对大家有所帮助。 我们都知道swiper是交互体验十分好的轮播插件 但是通过angular(ng-repeat)循环出来的swipe…

    编程技术 2025年3月8日
    200
  • js基础提升学习之运算符和表达式

    这次给大家带来js基础提升学习之运算符和表达式,使用js运算符和表达式的注意事项有哪些,下面就是实战案例,一起来看一下。 怎样才能得到一个数的二进制呢? 格式:alert( 变量名.toString(2) ); 如果想要得到一个数的其他进制…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论