美文网首页
对象、原型(prototype)、指针(__proto__)、构

对象、原型(prototype)、指针(__proto__)、构

作者: 墨丶_dadb | 来源:发表于2020-09-15 11:34 被阅读0次

一、函数对象

①创建函数(var a = function (){}
②js原生对象中除Math,JSON其他对象(包括Number,String,Boolean,Object,Function,Array,RegExp,Error,Date等,可通过new表达式实例化)

函数对象都有prototype属性,也是一个对象
函数对象都有指针(__proto__)和构造器(constructor),指针指向Function.prototype,构造器指向Function,包括Function对象本身也是如此
Function.prototype是一个空函数

/*
* 函数对象.__proto__ === Function.prototype // true
* 函数对象.constructor === Function // true
*/
var a = function () {}
a.__proto__ === Function.prototype // true
a.constructor === Function // true
Object.__proto__ === Function.protootype // true
Object.constructor === Function // true

二、prototype对象

prototype对象只存在于函数对象属性中

prototype对象都有指针(__proto__)和构造器(constructor),一般来说,它的指针指向Object.prototype,构造器指向它所属的函数对象
Object.prototype的指针(__proto__)为null
prototype对象可能会被修改指向

// 未改变指向时
函数对象.prototype.constructor === 该函数对象 // true
函数对象.prototype.__proto__ === Object.prototype // 此处重点,除Object以外的其他函数对象返回true
Object.prototype.__proto__ === null // true
// prototype对象可能会被修改指向,如改为指向new出来的对象,等同于把prototype变成了第四类,继承中常用
函数对象.prototype.constructor === 父类
函数对象.prototype.__proto__ === 父类.prototype

三、普通对象

①字面量创建对象(var a= {})
②js原生对象中Math,JSON

普通对象都有指针(__proto__)和构造器(constructor),指针指向Object.prototype,构造器指向Object

/*
* 普通对象.constructor === Object // true
* 普通对象.__proto__ === Object.prototype // true
*/
var a = {}
a.constructor === Object // true
a.__proto__ === Object.prototype // true

四、new操作符创建的对象

①new对象(var a = new Date())

new操作符创建的对象都有指针(__proto__)和构造器(constructor),指针指向它父类的原型(prototype),构造器指向它的父类

/*
* new对象.__proto__ === 父类.prototype
* new对象.constructor === 父类
*/
var a = new Date()
a.__proto__ === Date.prototype // true
a.constructor === Date // true

相关文章

网友评论

      本文标题:对象、原型(prototype)、指针(__proto__)、构

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