js中5中继承方式分析
2024-09-30 15:51:37
//1、借用式继承 把sup的构造函数里的属性方法克隆一份sub实例对象
function Super(){
this.val = 1;
this.fun1 = function(){console.log('fun1')};
}
Super.prototype.name = "name";
Super.prototype.fun2 = function(){console.log('fun2')};
function Sub(){
Super.call(this);
}
var sub1 = new Sub();
var sub2 = new Sub();
console.log(sub1.fun1 === sub2.fun1);
console.log(sub1.val);
console.log(sub1.name);
sub1.fun1();
//2、原型式继承 把Super的实例对象拿作Sub构造函数的原型属性
function Super(){
this.val1 = 1;
this.fun1 = function(){console.log(1)};
}
var pro = new Super();
function Sub(){}
Sub.prototype = pro;
var sub1 = Sub();
//3、寄生式 sub实例化对象新增了自己的属性方法,并且把Super的实例对象拿作Sub构造函数的原型属性
function Super(){
this.val1 = 1;
this.fun1 = function(){console.log(1)};
}
Super.prototype.val2 = 2;
Super.prototype.fun2 = function(){console.log(2)};
function Sub(){
}
Sub.prototype = new Super();
var sub1 = new Sub();
sub1.attr1 = 1;
sub1.attr2 = 2;
//4、组合式继承 把sup的构造函数里的属性方法克隆一份sub实例对象,并且把Super的实例对象拿作Sub构造函数的原型属性
function Super(){
this.val1 = 1;
this.fun1 = function(){console.log(1)};
}
Super.prototype.val2 = 2;
Super.prototype.fun2 = function(){console.log(2)};
function Sub(){
Super.call(this);
}
Sub.prototype = new Super();
var sub1 = new Sub();
var sub2 = new Sub();
console.log(sub1);
console.log(sub1.fun1 === sub2.fun1);
console.log(sub1.fun2 === sub2.fun2);
//5、寄生组合式 Sub构造函数的原型属性是第三个构造函数(它的原型为Sup的原型,但是没有Sup构造函数里的属性方法)的实例对象,把sup的构造函数里的属性方法克隆一份sub实例对象
function beget(obj){ // 生孩子函数 beget:龙beget龙,凤beget凤。
var F = function(){};
F.prototype = obj;
return new F();
}
function Super(){
// 只在此处声明基本属性和引用属性
this.val = 1;
this.arr = [1];
}
// 在此处声明函数
Super.prototype.fun1 = function(){};
Super.prototype.fun2 = function(){};
//Super.prototype.fun3...
function Sub(){
Super.call(this); // 核心
// ...
}
var proto = beget(Super.prototype); // 核心
proto.constructor = Sub; // 核心
Sub.prototype = proto; // 核心
var sub = new Sub();
alert(sub.val);
alert(sub.arr);
最新文章
- Android热修复AndFix
- Python的垃圾回收机制
- iStylePDF c#集成开发示例
- laravel Ajax post方式的使用
- 将webkit内核封装为duilib的浏览器控件
- [原]基于CAS实现单点登录(SSO):登录成功后,cas client如何返回更多用户信息
- 5. Effective Java 第三版——使用依赖注入取代硬连接资源
- WebApi的多版本管理
- Codeforces 671 D. Roads in Yusland
- selemium 常用查找方法
- 2016年 CodePen 最热门的前端代码 Top 100
- 如何用 Python 模糊搜索文件
- centos6.8 固定IP
- IDEA run下output标签悬浮/弹出状态
- Python 语法提示vim配置
- 函数和常用模块【day06】:datetime模块(二)
- RabbitMQ -- unacked
- HihoCoder - 1807:好的数字串 (KMP DP)
- 集成学习算法总结----Boosting和Bagging
- 重学C语言---02C语言概述
热门文章
- vue tab切换demo
- css3 混合模式mix-blend-mode background-blend-mode 以及混合模式的隔断 isolation
- Java位运算(移位,位与,或,异或,非)
- E20170520-ts
- SS上网配置(Window 7/8/10 )详解
- [POI2007]石头花园SKA
- Service官方教程(8)Bound Service示例之2-跨进程使用Messenger
- 有关LD_LIBRARY_PATH与ld.so.conf
- hdu 1430 魔板 康托展开 + 很好的映射
- D. Alyona and a tree 公式转换 + 分块暴力