原生js实现继承
- 原型链继承
function Father(){
this.status = true;
}
Father.prototype.getSuper = function(){
return this.status;
};
function Son(){
this.substatus = false;
}
//继承了 SuperType
Son.prototype = new Father();
Son.prototype.getSub = function (){
return this.substatus;
};
var instance = new Son();
alert(instance.getSuper()); //true - 借用构造函数继承
function Father(){
this.colors = [1,2,3];
}
function Son(){
//继承了 Father
Father.call(this);
}
var instance1 = new Son();
instance1.colors.push(4);
alert(instance1.colors); //"1,2,3,4"
var instance2 = new Son();
alert(instance2.colors); //"1,2,3" - 组合继承
function Father(name){
this.name = name;
}
Father.prototype.sayName = function(){
alert(this.name);
};
function Son(name, age){
//继承属性
SuperType.call(this, name);
this.age = age;
} Son.prototype = new Father(); //将子类的原型指向父类
Son.prototype.constructor = Son; //将子类的constructor指向自己
Son.prototype.sayAge = function(){
alert(this.age);
};
var instance = new Son("lh", 19);
instance1.sayName(); //"lh";
instance1.sayAge(); //19 - 原型式继承
function object(o){
function F(){}
F.prototype = o;
return new F();
}
var person = {
name: "lh",
loves: ["a", "b", "c"]
};
var anotherPerson = object(person);
anotherPerson.name = "Greg";
anotherPerson.friends.push("d");
alert(person.loves); //"a,b,c,d"这里的object方法和Object.create()方法类似。
- 寄生式继承
function object(o){
function F(){}
F.prototype = o;
return new F();
}
function createAnother(obj){
var clone = object(obj); //通过调用函数创建一个新对象
clone.say = function(){ //给这个对象添加方法
alert("hi");
};
return clone; //返回这个对象
}
var person = {
name: "lh",
loves: ["a", "b", "c"]
};
var anotherPerson = createAnother(person);
anotherPerson.say(); //"hi" - 寄生组合式继承
function inheritPrototype(son, father){
var prototype = Object.create(father.prototype);
son.prototype = prototype;
prototype.constructor = son;
}
function Father(name){
this.name = name;
}
Father.prototype.sayName = function(){
alert(this.name);
};
function Son(name, age){
Father.call(this, name);
this.age = age;
}
inheritPrototype(Son, Father); - 使用es6实现
class Father{
constructor(x, y) {
this.x = x;
this.y = y;
}
}
class son extends Father{
constructor(x, y, age) {
super(x, y); // 调用父类的constructor(x, y)
this.age= age;
}
toString() {
return this.color + ' ' + super.toString(); // 调用父类的toString()
}
}
子类继承父类中constructor中必须先调用super()方法才能访问this,否则会报错。
原生js实现继承的更多相关文章
- koa 基础(十七)原生 JS 中的类、静态方法、继承
1.app.js /** * 原生 JS 中的类.静态方法.继承 * es5中的类和静态方法 */ function Person(name, age) { // 构造函数里面的方法和属性 this. ...
- 用原生JS读写CSS样式的方法总结
为了日后方便查询,本人翻阅了一些资料总结了以下方法,仅限原生JS,如有不对的地方欢迎指出!只求大家看完觉得有学到点什么就OK了! 一.可以通过DOM节点对象的style对象(即CSSStyleDe ...
- 框架操作DOM和原生js操作DOM比较
问题引出 对于Angular和React操作DOM的速度,和原生js操作DOM的速度进行了一个比较: 一个同学做的demo 代码如下: <!DOCTYPE html> <html n ...
- 原生js dom记忆的内容
1.DOM基础getElementByIdgetElementByTagNamegetElementByName getElementsByClass querySelector querySelec ...
- 原生JS面向对象思想封装轮播图组件
原生JS面向对象思想封装轮播图组件 在前端页面开发过程中,页面中的轮播图特效很常见,因此我就想封装一个自己的原生JS的轮播图组件.有了这个需求就开始着手准备了,代码当然是以简洁为目标,轮播图的各个功能 ...
- 原生js+css实现重力模拟弹跳系统的登录页面
今天小颖把之前保存的js特效视频看了一遍,跟着视频敲了敲嘻嘻,用原生js实现一个炫酷的登录页面.怎么个炫酷法呢,看看下面的图片大家就知道啦. 效果图: 不过在看代码之前呢,大家先和小颖看看css中的o ...
- 原生Js操作DOM
查找DOM .querySelectorAll(),它接受包含一个CSS选择器的字符串参数,返回一个表示文档中匹配选择器的所有元素的NodeList元素. .querySelector(),返回第一个 ...
- 原生JS插件(超详细)
作为一个前端er,如果不会写一个小插件,都不好意思说自己是混前端界的.写还不能依赖jquery之类的工具库,否则装得不够高端.那么,如何才能装起来让自己看起来逼格更高呢?当然是利用js纯原生的写法啦. ...
- 原生js实现vue组件功能
在如今VUE盛行的情况下,我们一直在惊叹于VUE的组件的功能,却不知道,原生js早就已经支持了这个功能. 最近在公开课学到的,js还有很多很多需要探索学习. 下面是一个简单的例子 <!DOCTY ...
随机推荐
- day4new-转自金角大王
Python之路,Day4 - Python基础4 (new版) 本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 ...
- Python内存机制简介
1: 变量不是盒子,应该把变量视作便利贴.变量只不过是标注,所以无法阻止为对象贴上多个标注.标注就是别名: >>> a = [1, 2, 3] >>> b = a ...
- 17个你必须牢记的Win10快捷键
电脑初学者掌握了盲打技术,可以提高录入速度:游戏玩家掌握了快捷键,可以在瞬息百变的对战中提高生存的机会:而Windows玩家掌握了快捷键,不但可以提高电脑操作速度,更能享受到初级玩家望着你那仰慕的眼神 ...
- 【错误收集】SVN冲突解决 标签: 错误收集 2016-03-13 08:44 624人阅读 评论(24) 收藏
最近在倒代码,这真的是一件挺低效率的事情的,但是为了之后工作的进行,必须把这些已经做好的界面,做好的功能搬到新的框架上来,所以安排了10来个同学一起倒代码,因为大家共用一个解决方案,所以使用svn来进 ...
- windows7蓝屏0x000000c4
故障还原: 360更新弹出更新提示,于是选择了关机自动更新,第二天开机发现电脑蓝屏报0x000000c4错误! 故障排查: 1.无法从最后一次正确配置启动windows7 2.无法进入安全模式 该错误 ...
- 三角形数且是完全平方数 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 E.Half-consecutive Numbers
三角形数:an=n*(n+1)/2; 完全平方数:bn=c^2; 既是三角形数又是完全平方数:An=6*A(n-1)-A(n-2)+2; A[23]={ 0, 1, 8, 49, 288, 1681, ...
- python 类与类之间的关系. 特殊成员
一.类与类之间的关系 1.依赖关系 在方法的参数位置把另一个类的对象作为参数进行传递 class Person: def play(self, tools): # 通过参数的传递把另一个类的对象传递进 ...
- cocos2d-x游戏开发(十五)游戏载入动画loading界面
这个资源载入的loading界面demo是在玩客网做逆转三国的时候随手写的,尽管我在那仅仅待了2个礼拜.可是也算參与了一个商业游戏项目了,学到不少东西.当时使用的cocos2d-x还是1.0版的,我用 ...
- Python基础:13装饰器
装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的应用有插入日志.性能测试.事务处理等.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同 ...
- Vue.js 第4章 组件与路由
组件 什么是组件:组件就是一些标签结构的封装,同时为这些结构添加需要的业务逻辑,设置你想要的样式 一个组件中一般可以设置:结构,功能和样式 为什么要使用组件: 使用方便 复用 组件的创建和使用 组件的 ...