2018-03-23 JS原型

作者: 彭奕泽 | 来源:发表于2018-03-23 12:39 被阅读7次

1. 公用属性(就是原型)

每个对象都有toString()、valueof()等方法,但他们并其实没有单独的方法,而是JS在每个对象里都存了一个隐藏属性:__proto__,这个属性指向了存放公用属性的地址(Object.prototype),当用toString()时,就是调用的公用属性

o1.toString === o2.toString   //true

同时Number对象还有它特有公用属性,所以它比Object要多一个公用属性库,并且会先访问Number的原型(公用属性库),这一条链就叫原型链,像下图

原型链
同理,String、boolean也有自己的原型,但若平常没被引用的话会被当作垃圾回收,所以平常对象的原型是Object.prototype在引用,可得⬇️
Object.prototype === o1.__proto__     //true,是把prototype的地址赋给__proto__属性了

所以它们最终指向的Object的公有属性,就是Object.prototype(原型),Number、String的特有公有属性也是它们的prototype属性在引用,同理有

Number.prototype.__proto__ === Object.prototype //true,是把Object.prototype的地址赋给Number的__proto__属性了

var n1 = new Number(1);
n1.__proto__ === Number.prototype    //true,是把Number.prototype的地址赋给n1的__proto__属性了
n1.__proto__.__proto__ === Object.prototype  //true

2. __proto__和prototype的区别

原型.png

打开浏览器就相当于生成了一个window,里面存了Number、String、Boolean、Object这几个对象,对象里的prototype属性里存了它们原型的地址,在你写:

var n = new Number(1);     //就会把Number.prototype里的地址放入n的__proto__属性里

这样用n就能调用Number的原型了

总结:

var 对象 = new 函数();    //函数可以是Number/String/Boolean/Object
对象.__proto__ === 函数.prototype    //true

__proto__是对象的属性,prototype是函数的属性

面试题'1'.__proto__是什么?
答:'1'会临时转化为String对象

'1'.__proto__ === String.prototype    //true

所有对象都有__proto__属性

Object.prototype.__proto__ === null;

1.toString()     //语法错误,不加引号JS会把.当作小数点
1..toString()    //'1',第一个.当作小数点,第二个为点操作符

相关文章

  • 2018-03-23 JS原型

    1. 公用属性(就是原型) 每个对象都有toString()、valueof()等方法,但他们并其实没有单独的方法...

  • 廖雪峰JS小记

    (function(){})() 原型,原型链 浅谈Js原型的理解JS 原型与原型链终极详解 对象 对象:一种无序...

  • Javascript(三)之原型继承理解

    进阶路线 3 原型继承 3.1 优秀文章 最详尽的 JS 原型与原型链终极详解 一 最详尽的 JS 原型与原型链终...

  • JS的__proto__和prototype

    最近在回顾JS的原型和原型链的知识,熟悉JS的同学都知道JS的继承是靠原型链实现的,那跟原型链相关的属性__pro...

  • 我的投稿

    js原型

  • JS原型

    最近一直在理解JS的原型------《你不知道的JS》--------《JS设计模式》 里面都讲JS的原型运作方式...

  • js基础(三)

    js基础 原型链和原型对象 ... ... js没有继承原型对象prototype通常用来添加公共的属性或行为且只...

  • 发现•分享—2019-01-17

    文章 JS JS 异步编程六种方案 JS基础—原型对象的那些事(一) JS基础—原型对象的那些事(二) CSS 综...

  • 前端资料

    ES6新数据类型 Symbol . js变量提升函数提升 js this js 原型及原型链理解 new做了什么 ...

  • javaScript中的面向对象思想之原型

    二、js的原型1、原型的概念原型是构造函数在js代码编译阶段,由系统为我们创建出来的一个对象;原型原型可以给系统构...

网友评论

    本文标题:2018-03-23 JS原型

    本文链接:https://www.haomeiwen.com/subject/reztcftx.html