原生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 ...
随机推荐
- 操作系统之LRU算法 C语言链表实现
LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰.该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历 ...
- [idea]idea配置tomcat 标签: tomcatidea 2017-03-12 22:12 402人阅读 评论(19)
我们在使用idea的时候,一定会遇到的一步,就是使用tomcat来发布我们的项目,那么,如何在idea中设置tomcat呢?下面就随小编来一起学习一下吧. 设置tomcat 打开设置界面 Run-&g ...
- 发布网站时 遇到XX类型 同时存在XX.dll和XX.dll中
遇到该问题的可能如下: 1.复制了页面 更改了名字 可是对应的一些地方没有注意 <%@ Page Language="C#" AutoEventWireup="tr ...
- 小爬爬4:12306自动登录&&pyppeteer基本使用
超级鹰(更简单的操作验证) - 超级鹰 - 注册:普通用户 - 登陆: - 创建一个软件(id) - 下载示例代码 1.12306自动登录 # Author: studybrother sun fro ...
- UVA_10055:Hashmat the brave warrior
Language:C++ 4.8.2 #include<stdio.h> int main(void) { long long int a, b; while(scanf("%l ...
- Redis 设置密码登录
前言 redis在生产环境中通常都会设置密码以保证一定的安全性,本篇blog就简单记录一下如何在redis中设置客户端登录密码. 修改redis.conf RT,打开redis.conf文件,搜索re ...
- myeclipse 如何更改java jsp 等文件的编码方式
java的编码方式: 1.window——>preference 2.General——>Workspace,右边[Text file encoding]选择编码后,点击[OK]. jsp ...
- PyTorch入门学习(二):Autogard之自动求梯度
autograd包是PyTorch中神经网络的核心部分,简单学习一下. autograd提供了所有张量操作的自动求微分功能. 它的灵活性体现在可以通过代码的运行来决定反向传播的过程, 这样就使得每一次 ...
- oracle函数 NLS_LOWER(x[,y])
[功能]返回字符串并将字符串的变为小写; [参数]x字符型表达式 [参数]Nls_param可选,指定排序的方式(nls_sort=) . SCHINESE_RADICAL_M(部首.笔画) SCHI ...
- @codeforces - 1205D@ Almost All
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个 n 个点的无向树. 请在每条边上写上权值,使得对于每一 ...