原型和原型链

JS里的内置对象

全局对象

ECMAScript 规定全局对象叫做 global,浏览器默认全局对象是window
ECMAScript规定的函数,在任何地方可以使用的函数

global.parseInt
global.parseFloat
global.Number
global.String
global.Boolean
global.Object

浏览器私有的函数

window.alert
window.prompt
window.comfirm
window.console.log
window.console.dir
window.document
window.document.createElement
window.document.getElementById

简单类型与对象

var n1 = 1  //n1是简单的数据类型,值是1
n1.toString()  //'1'
var n2 = new Number(1)  //n2是对象,valueOf值是1

简单类型是没有属性的,那是如何调用toString()方法的呢?简单的类型是怎么用对象的方法的?以n1.toString为例
生成一个临时对象,临时对象里再调用toString(),具体步骤如下:
1、n1.toString(),
2、生成一个临时对象temp,temp = new Number(n1)
3、temp对象调用toString(),temp.toString()

简单类型加上一个属性并赋值,是否可以取到该属性的值?

var n1 = 1
n1.*** = 2  //临时对象被回收
n1.*** = ?  //undefined

所以JS中简单类型也可以看作是一个对象

当一个变量使用一个属性或方法时,JS会判断此变量是否是对象,若不是对象,则包装成一个对象。

原型

object的共有属性 Object.protype,这就是原型,Object的共有属性是所有对象的共有属性
prototype属性,这个属性包含一个对象__proto__,用来存共有属性

var o1 = {}
o1.__proto__ === Object.prototype    //true

原型链

JS在创建对象(不论是普通对象还是函数对象)的时候,都有一个叫做__proto__的内置属性,用于指向创建它的函数对象的原型对象prototype。

var 对象 = new 函数()
对象.__proto__ === 函数.prototype

__proto__  //对象的属性
prototype  //函数的属性

函数.prototype 也是一个对象
函数.prototype.__proto__ === Object.prototype

如下例

var n = new Number(2);
n.__proto__  //存Number的共有属性
n.__proto__ === Number.prototype  //true
n.__proto__.__proto__  //存对象的共有属性
n.__proto__.__proto__ === Object.prototype  //true

Number.prototype是Number共有属性的引用
n.__proto__是Number的共有属性的引用

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 为什么要理解原型和原型链,因为有利于我们理解和实现 JS对象继承。 __proto__ __proto__是什么W...
    微风玉米阅读 3,520评论 0 2
  • 学习使用过js的人一开始都会觉得js简单,这是因为js语法简单,学习过编程语言的人,很容易掌握js的基本语法并按要...
    易则知阅读 5,069评论 0 11
  • 前言 此文章为加深对JS中重要概念进行理解,不建议没有任何JS基础的人看,只为加深对概念理解通过实际的例子,而不是...
    cduyzh阅读 4,359评论 1 3
  • 声明:此文为转载文章,为了自己看起来方便特此重新排版,等日后看懂了再自己整理疏解,查看原文请点击这里。 正文: J...
    辞镜朱颜阅读 3,582评论 0 1
  • JavaScript在ES6之前没有类似class,extend的继承机制,JavaScript的继承主要是通过原...
    肆意咯咯咯阅读 3,130评论 0 2

友情链接更多精彩内容