javascript面向对象中继承实现?
面向对象的基本特征有:封闭、继承、多态。
在JavaScript中实现继承的方法:
1. 原型链(prototype chaining)
2. call()/apply()
3. 混合方式(prototype和call()/apply()结合)
4. 对象冒充
继承的方法如下:
1、prototype原型链方式:
j<pre style="box-sizing: border-box; outline: 0px; margin: 0px; padding: 10px; position: relative; font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace; white-space: pre-wrap; overflow-wrap: break-word; overflow-x: auto; font-size: 14px; line-height: 1.5; color: rgb(0, 0, 0); max-width: 600px;">function teacher(name){ this.name = name;
}
teacher.prototype.sayName = function(){
console.log("name is "+this.name);
} var teacher1 = new teacher("xiaoming");
teacher1.sayName();
function student(name){ this.name = name;
}
student.prototype = new teacher() var student1 = new student("xiaolan");
student1.sayName(); // name is xiaoming // name is xiaolan</pre>
2、call()/apply()方法
image<pre style="box-sizing: border-box; outline: 0px; margin: 0px; padding: 10px; position: relative; font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace; white-space: pre-wrap; overflow-wrap: break-word; overflow-x: auto; font-size: 14px; line-height: 1.5; color: rgb(0, 0, 0); max-width: 600px;">function teacher(name,age){ this.name = name; this.age = age; this.sayhi = function(){
alert('name:'+name+", age:"+age);
}
}
function student(){ var args = arguments;
teacher.call(this,args[0],args[1]); // teacher.apply(this,arguments);
} var teacher1 = new teacher('xiaoming',23);
teacher1.sayhi(); var student1 = new student('xiaolan',12);
student1.sayhi(); // alert: name:xiaoming, age:23 // alert: name:xiaolan, age:12</pre>
3、混合方法【prototype,call/apply】
image<pre style="box-sizing: border-box; outline: 0px; margin: 0px; padding: 10px; position: relative; font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace; white-space: pre-wrap; overflow-wrap: break-word; overflow-x: auto; font-size: 14px; line-height: 1.5; color: rgb(0, 0, 0); max-width: 600px;">function teacher(name,age){ this.name = name; this.age = age;
}
teacher.prototype.sayName = function(){
console.log('name:'+this.name);
}
teacher.prototype.sayAge = function(){
console.log('age:'+this.age);
}
function student(){ var args = arguments;
teacher.call(this,args[0],args[1]);
}
student.prototype = new teacher(); var student1 = new student('xiaolin',23);
student1.sayName();
student1.sayAge(); // name:xiaolin // age:23</pre>