!!!函数也是一个特殊的对象
所有的对象都有一个属性叫proto 代表的是这个对象的原型对象
原型思想:内存共用
所有函数都有name,length,prototype属性,用函数创建对象,创建出来的原型对象就是prototype属性引用的对象
prototype属性中引用了一个系统内置的对象:new Object()
对象有proto属性 代表他的原型对象
函数有prototype属性 代表创建的对象的原型对象
原型对象可以访问成员
new fn()
1.创建一个空对象==》创建一个空对象{} 给他添加一个属性__proto__ 这个属性引用fn.prototype
2.运行fn函数 函数内部的this就是创建的这个对象
3.new fn()表达式会生成一个结果 这个结果一般就是那个创建的对象,如果有函数返回值return,并且return返回的是引用数据,那么这个对象就会被销毁,返回值作为表达式的结果
new fn;和new fn();的区别
new fn;能创建对象,但是并不会传入参数,只有加了括号的new fn()才能传入参数
原型的理解:
函数的属性:prototype
对象的属性:__proto__
function fn(){
this.name="karen"
this.age=20
}
var a=new fn(); // var a={name:"karen",age=20}
// fn.prototype=a.__proto__
function fm(){
this.life=1;
this.eye=2;
}
fm.prototype=a; // fm的原型就变成了{name:"karen",age="20"}
var b=new fm() // var b={life:1,eye:2} 并且b中也能访问到name和age属性
var b1=new fm() // b1也能访问所有的属性,因为他们拥有相同的原型对象
所以,原型思想就是内存的共用