一 原型四原则
1.所有引用类型都具有对象属性,即可自由扩展属性(除了null)
- 所有的引用类型都有一个proto属性,属性值是一个普通的对象
- 所有的对象都有一个prototype属性,属性值也是一个普通的对象
- 所有的引用类型的proto属性值都指向它的构造函数的prototype属性值
- 当试图得到一个对象的某个属性时,如果这个对象本身没有这个属性,那么回去它的proto属性(即它的构造函数的prototype)中寻找。
二 描述一下new过程:
- 创建一个新对象
- this指向这个对象
- 执行代码,即对this赋值
- 返回this
三 原型链继承例子
function superType(){
this.property=true;
}
superType.prototype.getSuperValue=function () {
return this.property;
}
function subType(){
this.subproperty=false;
}
subType.prototype=new superType();
subType.prototype.getSubValue=function () {
return this.subproperty;
}
var instance=new subType();
console.log(instance.getSuperValue()); //true
console.log(instance.getSubValue()); //false
//小红书162有详细解释,我就不多讲了
- 试图查找一个对象的某个属性,对象本身没有,再去对象的prototype找,这样一层一层查找就形成了原型链
四 构造函数
function Fun(name,age){
this.name=name;
this.age=age;
this.class='class-one';
}
var f1=new Fun('zhangsan',18);
var f2=new Fun('lisi',19);
console.log('f1',f1);
console.log('f2',f2);
大写字母开头的一般都是构造函数
- 从图片看以看出f1和f2都是使用Fun构造函数构造出来的,f1和f2都可以共用到class这个属性,再通过添加参数得到各自的属性值。
- 扩展:
var a={} 是var a=new Object()的语法糖(a的构造函数是Object函数)
var b=[] 是var b=new Array()的语法糖 (b的构造函数是Array函数)
function Foo(){…}其实是 var Foo = new Function(…) (Foo 的构造函数是 Function 函数)
使用 instanceof 判断一个函数是否是一个变量的构造函数 (判断一个变量是否为“数组” 变量 instanceof Array)
本文章分享就到这里了,有什么错误的地方或者需要修改的地方评论提出来,谢谢