一、函数对象
①创建函数(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
网友评论