博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
继承的几种模式
阅读量:5255 次
发布时间:2019-06-14

本文共 2025 字,大约阅读时间需要 6 分钟。

// 继承方式1 ==> 默认的原型继承
function Person() {}
Person.prototype.run = function() {};
var xiaohong = new Person();

// 继承方式2 ==> 置换后的原型继承

function Person() {}
Person.prototype = {
say: function() {}
}
var xiaohong = new Person();

// 继承方式3 ==> 寄生式继承

var obj = { val: 100 };
var newObj = Object.create( obj );

// 继承方式4 ==> 混入继承

function extend( o1, o2 ) {
for( var key in o2 ) {
o1[key] = o2[key];
}
}
var o = { abc: 888 };
var o2 = { aaa: 111, bbb: 222, ccc: 333 };
extend( o, o2 );

// 继承方式5 ==> 对象冒充( 构造函数借用 )

function Person( name, age, sex ) {
this.name = name;
this.age = age;
this.sex = sex;
}

function Student( name, age, sex ) {

this.Person = Person;
this.Person( name, age, sex );
delete this.Person;
}

function Student( name, age, sex ) {

//Person.call( this, name, age, sex );
Person.apply( this, arguments );
}

var xiaohong = new Student('小红', 16);

console.log( xiaohong );

// 继承方式6 ==> 原型组合继承

function Person( name, age, sex ) {
this.name = name;
this.age = age;
this.sex = sex;
}

Person.prototype = {

run: function() {
console.log('人都会跑');
}
};

function Student( name, age, sex ) {

Person.apply( this, arguments );
}

// 解决方案1:

// 这样可以,但是不建议,因为一定会给Student添加一些额外的方法,
// 这些方法不应该和Person共享
//Student.prototype = Person.prototype;

// 解决方案2,混入继承,可取,用的也比较多

//extend( Student.prototype, Person.prototype );

// 解决方案3,原型寄生组合式继承

//Student.prototype = Object.create( Person.prototype );

// 解决方案4,

Student.prototype = new Person;

// xiaofang ==> Student.prototype ==> Person.prototype ==> Object.prototype ==> null

var xiaofang = new Student( '小芳', 17, '女' );
xiaofang.run();

/*
* 理想的继承解决方案:
* */
function Person( name, age, sex ) {
this.name = name;
this.age = age;
this.sex = sex;
}

Person.prototype = {

run: function() {
console.log('人都会跑');
}
};

function Student( name, age, sex ) {

Person.apply( this, arguments );
}

// 让学生实例,继承Student.prototype & Person.prototype

Student.prototype = Object.create( Person.prototype );

// 再给Student扩展自己独有的方法

extend( Student.prototype, {

} );

转载于:https://www.cnblogs.com/luxiaoxiao/p/6102977.html

你可能感兴趣的文章
STEP2——《数据分析:企业的贤内助》重点摘要笔记(六)——数据描述
查看>>
ViewPager的onPageChangeListener里面的一些方法参数:
查看>>
Jenkins关闭、重启,Jenkins服务的启动、停止方法。
查看>>
CF E2 - Array and Segments (Hard version) (线段树)
查看>>
Linux SPI总线和设备驱动架构之四:SPI数据传输的队列化
查看>>
SIGPIPE并产生一个信号处理
查看>>
CentOS
查看>>
Linux pipe函数
查看>>
java equals 小记
查看>>
爬虫-通用代码框架
查看>>
2019春 软件工程实践 助教总结
查看>>
YUV 格式的视频呈现
查看>>
Android弹出框的学习
查看>>
现代程序设计 作业1
查看>>
在android开发中添加外挂字体
查看>>
Zerver是一个C#开发的Nginx+PHP+Mysql+memcached+redis绿色集成开发环境
查看>>
多线程实现资源共享的问题学习与总结
查看>>
Learning-Python【26】:反射及内置方法
查看>>
torch教程[1]用numpy实现三层全连接神经网络
查看>>
java实现哈弗曼树
查看>>