一个对象没有某些属性和方法,另一个对象有,拿过来使用,就是继承
继承的实现方式
混入式继承
var obj = {};
var obj1 = {
money : 10000000,
car : 100,
brand: "布加迪威航",
huaqian: function(){
console.log("不差钱,随便花");
}
};
console.log(obj);
for(var k in obj1){
//money
//car
//brand
//huaqian
obj[k] = obj1[k];
}
console.log(obj);
原型继承的方式
- 通过修改原型实现的继承 就是原型继承
- 通过构造函数创建出来的对象继承自构造函数的原型对象
//Person.prototype
var human = {
gender:"female",
height: 170,
weight: 50
}
function Person(){
}
Person.prototype.name = "王莉莉";
for(var k in human){
Person.prototype[k] = human[k];
}
var p = new Person();
console.log(p.name,p.gender,p.height,p.weight);
- 修改原型对象
Person.prototype.maimeng = function (){
console.log("感觉自己萌萌哒");
}
p.maimeng();
- 替换原型对象
Person.prototype = human;
var p = new Person();
console.log(p.gender);
经典继承
- 调用一个方法,就能实现继承
- var obj1 = Object.create(obj)
- 创建出来一个新的继承自参数 obj 的对象 obj1
- 其实内部使用的就是原型继承
- ES5才支持的这个方法 需要考虑兼容性问题
var human = {
name: "王莉莉",
gender: "female",
dance :function(){
console.log("二人转,转转转")
}
}
var obj = Object.create(human);
console.log(obj);
处理经典继承的兼容性问题
if(Object.create){
var obj = Object.create({name:"李狗二",age:18});
}else{
Object.create = function(obj){
//在这个函数中要实现的功能
//就是,创建一个对象,将obj设置为该对象的原型
//要设置原型,只能通过两种方式,
// 一种是 对象.__proto__ 另外一种是 构造函数.prototype
//由于__proto__这个属性有兼容性问题,所以不使用
//就只能使用 构造函数.prototype 去替换原型对象了
function F(){}
F.prototype = obj;
var result = new F();
return result;
}
}
//不推荐直接修改内置对象,因为在多人开发的时候,会产生冲突
Object.creat = function () {
console.log("我是李二狗,我的create方法就是用来输出这句话的,哈哈哈");
}
function hanyingxinCreate(obj){
if(Object.create){
return Object.creat(obj);
}else{
function F(){}
F.prototype = obj;
var result = new F();
return result;
}
}
内容转载自:https://blog.ihoey.com/posts/javascript/2016-06-15-javascript-inherit.html