知识点前瞻
- 在javascript里引用类型都是对象
- 对象是通过函数创建的(也可以是字面量的形式,但是字面量没有构造函数,也就不存在与构造函数相关的的原型链继承的问题了,但是可以通过Object.create()实现字面量的继承,这篇文章谈的都是构造函数创建的对象),而函数又是另一种对象
- 每个函数都有一个prototype,除了匿名函数,匿名函数只有__proto__
- 每个对象都有一个__proto__,除了Object,Object只有protoype
demo1 认识 函数的原型属性prototype对应的原型对象 和 原型指针__proto__
function fun(){
}
var variable = {a:1}
console.log(variable)
console.log(fun)
console.log(fun.prototype)
很明显 fun.prototype 是fun的属性,叫做原型属性,指向fun的原型对象,也就是说
函数(匿名函数除外,匿名函数只有__proto__)包含了这两个基本属性 一个原型属性prototype 一个原型指针__proto__
原型属性prototype 指向原型对象
原型指针__proto__ 指向他的构造函数的原型对象
再来看一下原型对象里面含有什么东西
constructor 指向当前函数 不止构造函数有constructor,所有的函数(匿名函数除外)都有constructor,默认这个constructor指向这个函数本身(Object的constructor指向Function)
再来看原型指针__proto__
换句话说 函数创建的对象的原型对象的原型指针__proto__指向的对象就是Object的原型对象
验证
function fun(){
}
fun.prototype.a="我是函数fun这个对象的原型对象的属性a"
let f1 = new fun();
console.log(f1)