原型和原型链
- 所有的函数都是通过
new函数
创建 - 所有函数都是对象 通过
new Function创建
- 函数中可以有属性
- 所有对象都是引用类型
js
function test() { return {} }
new test() // {} new Object创建的
function test() { }
new test() //test {}
typeof Object //'function'
typeof Array // 'function'
原型 prototype
所有函数都有一个属性:prototype ,称之为函数原型 // 普通对象没有prototype
默认情况下,prototype是一个普通的Object对象 // prototype = { }
默认情况下,prototype中有一个属性,constructor, 他也是一个对象,它指向构造函数本身
js
var test =new Object()
test.prototype.constructor===test. // true
Object.prototype.constructor===Object // true
引式原型 __ proto__
所有对象都有一个属性:__proto__
,称之为隐式原型
默认情况下,隐式原型指向创建该对象的函数的原型
js
// 对象一定是通过构造函数产生 函数也是对象
function test() { }
var obj = new test();
obj.__proto__ === test.prototype //true
var obj = new test();
obj.__proto__ === Object.prototype