创建对象的几种方法
1、字面量
var o1 = {name:‘o1’}
var o11 = new Object({name:‘o11’})
2、通过构造函数
var M = function(){this.name='o2'}
var o2 = new M();
3、Object.create
var P = {name:'o3'}
var o3 = Object.create(P)
继承的几种方式
1、构造函数
function Parent1 (){
this.name = 'parent1';
}
function Child1 (){
Parent1.call(this);
this.type = 'child1';
}
Parent1.prototype.say = function(){
console.log("hi");
}
console.log(new Child1);
缺点:1、只能部分继承,无法继承父类在原型链上的属性和方法
2、借助原型链实现继承
function Parent2 (){
this.name = 'parent2';
this.play = [1,2,3];
}
function Child2 () {
this.type = 'child2';
}
Child2.prototype = new Parent2();
console.log(new Child2);
缺点:
1、所有实例会共用其原型链上的方法,改变一个会影响另一个
2、在创建 Child 的实例时,不能向Parent传参
3、组合方式1
function Parent3() {
this.name = 'parent3';
this.play = [1,2,3];
}
function Child3() {
Parent3.call(this); //第一次执行
this.type = 'child3';
}
Child3.prototype = new Parent3(); //第二次执行
console.log(new Child3)
缺点:父类构造函数重复执行了
4、组合方式2
function Parent4() {
this.name = 'parent4';
}
function Child4() {
Parent4.call(this);
this.type = 'child4';
}
Child4.prototype = Parent4.prototype;
缺点:不能区分对象是子类的实例还是父类的实例
5、组合方式3
function Parent5() {
this.name = 'parent5';
}
function Child5() {
Parent3.call(this);
this.type = 'child4';
}
Child5.prototype = Object.create(Parent5.prototype);
Child5.prototype.constructor = Child5;
网友评论