1.继承的实现方式
自己没有的别人有拿过来用,就是继承
1.1 混入式继承(mix-in)
var obj={};
var obj1 = {
name: "王健林",
money: "赚它一个亿",
makeMoney: function () {
console.log("再赚他一个亿");
}
}
// for(var k in obj1){
// obj[k] = obj1[k];
// }
// // console.log(obj.money);
1.2. 原型继承 (要有构造函数)
利用原型实现的继承效果,就是原型继承
function Person(){
}
var obj1 = {
name: "王健林",
money: "赚它一个亿",
makeMoney: function () {
console.log("再赚他一个亿");
}
}
var obj=new Person();
1.2.1 利用混入的方式,将要继承的对象的所有的属性和方法添加到当前对象的原型中
// for(var k in obj1){
// obj[k] = obj1[k];
// }
// // console.log(obj.money);
1.2.2 直接将要继承的对象作为当前对象的原型!
// Person.prototype = obj1;
// var obj = new Person();
// console.log(obj.money);
1.3. 经典继承
其实经典继承就是原型继承的另外一种实现方式!
Object.create();
1.3.1 语法: var 对象 = Object.create(要继承的对象);
1.3.2 功能: Object.create方法,可以用来创建一个对象,这个对象的原型,就是参数中传递进去的对象
1.3.3 原理: 其实就是将参数中传入的对象,作为了新对象的原型!
// var obj = {
// name: "朱三辉",
// sing: function () {
// console.log("我已开始练习,开始慢慢熟悉");
// }
// };
// var p = Object.create(obj);
// console.log(p.__proto__ === obj);
// p.sing();
1.3.4 Object.create方法有兼容性问题!
//解决兼容性问题
//我们自己封装的快速实现原型继承(经典继承)的方式
function myCreate(obj){
if(Object.create){
return Object.create(obj);
}else{
function F(){}
F.prototype = obj;
return new F();
}
}
2.继承的应用(帮所有的数组对象,添加一个方法 sum)
2.1 直接给Array原型添加属性和方法(最简单但是不稳妥的解决方案!)
// Array.prototype.sum = function () {
// var result = 0;
// for(var i = 0; i < this.length; i ++){
// result += this[i];
// }
// return result;
// }
// var arr = [1, 2, 3];
// var result = arr.sum();
2.2 要实现的功能,给所有的数组加上一个sum方法!(安全的扩展内置对象)
function MyArray () {
}
MyArray.prototype = [];
MyArray.prototype.sum = function () {
var result = 0;
for(var i = 0; i < this.length; i ++){
result += this[i];
}
return result;
}
var arr = new MyArray();
arr.push(1);
console.log(arr.sum());