原型
1.构造函数与普通函数的区别
通过不同的执行方式改变函数内部的this指向
function Foo(){
this.a = 1;
}
Foo() //this指向window
console.log(window.a); //1
var foo = new Foo(); // this指向foo实例对象
console.log(foo.a); // 1
2.prototype 与__ proto__
function Foo(){
this.a = 1;
}
var foo = new Foo()
显示原型与隐式原型
构造函数->显示原型(prototype)
实例对象->隐式原型(__ proto __)
console.log(Foo.prototype === foo.__proto__); //true 所有Foo实例对象的共同祖先
console.log(Object.getPrototypeOf(foo)===foo.__proto__);
//true 推荐使用Object.getPrototypeOf()方法获取实例对象的原型
Foo.prototype 是构造函数Object的实例对象
console.log(Foo.prototype.__proto__ === Object.prototype); //true
console.log(foo.__proto__.__proto__ === Object.prototype) //true
3.constructor构造函数
用于声明实例对象由谁创造
function Foo(){
this.a = 1;
}
var foo = new Foo()
console.log(foo.constructor);
//ƒ Foo(){
// this.a = 1;
//}
当我们修改对象原型时一般手动重新添加构造方法
function Foo(){
this.a = 1;
}
var foo = new Foo()
Foo.prototype = {
aa:11,
bb:22,
// constructor:Foo
}
Foo.prototype.constructor = Foo
console.log(foo);