ECMAScript继承
继承的定义
- ECMAScript 实现继承可以从父类入手,所有开发者定义的类都可作为父类,出于安全考虑,本地类和宿主类不能作为父类,因为容易收到恶意攻击
- 创建只是用于给子类提供通用函数的父类被看作抽象类
- 子类可以继承父类的所有属性和方法,子类可以扩展父类中没有的属性和方法,还可以覆盖父类中的属性和方法
继承的方式
一、对象冒充
原理:构造函数使用 this 关键字给所有属性和方法赋值(即采用类声明的构造函数方式)。因为构造函数只是一个函数,所以可使 ClassA 构造函数成为 ClassB 的方法,然后调用它。ClassB 就会收到 ClassA 的构造函数中定义的属性和方法
实现:
function ClassA(name){
this.name = name;
this.sayName = function(){
console.log(this.name);
}
}
function ClassB(name){
this.newName = ClassA; //函数名是指向函数的指针
this.newName(name);
}
var objA = new ClassA();
var objB = new ClassB('wyang');
objB.sayName(); //wyang
对象冒充可以实现多重继承
- 一个子类可以继承多个父类
- 两个类存在同名的属性或方法时,后继承的类优先级高
二、call() 方法
call([thisObj[,arg1[, arg2[, [,.argN]]]]])
参数:
- 第一个参数用作 this 的对象
- 参数都直接传递给函数自身
- 如果没有提供
thisObj
参数,那么Global
对象被用作thisObj
实现:
function fun(sex){
console.log(this.name + sex);
}
var obj = {
name:'wyang'
};
fun.call(obj,'is man'); //wyang
这个例子其实就是把
obj
替换成了fun函数中的this
,后面的参数与fun
函数的参数匹配
三、apply()方法
apply([thisObj[,argArray]])
参数:
- 第一个参数用作 this 的对象
- 传递给函数的参数的数组
- 如果没有提供
thisObj
参数,那么Global
对象被用作thisObj
实现:
function fun(sex,job){
console.log(this.name + sex + job);
}
var obj = {
name:'wyang'
};
fun.apply(obj,new Array('isman','fe')); //wyangismanfe
四、call()和apply()的区别
- 第一个参数一样
- 第二个参数:
call()
方法就是普通参数;apply()
方法是把参数组合成了数组进行传递(和函数的arguments相似)
五、call()和apply()的总结
call()
、apply()
方法其实就是修改对象内部的this
的指向
ECMAScript继承的更多相关文章
- ECMAScript 继承机制实现
继承机制的实现 要用 ECMAScript 实现继承机制,您可以从要继承的基类入手.所有开发者定义的类都可作为基类.出于安全原因,本地类和宿主类不能作为基类,这样可以防止公用访问编译过的浏览器级的代码 ...
- ECMAScript有6种继承方式(实现继承)
本人对于ECMAScript继承机制有些见解,如果说的不对,敬请赐教~~~~ 继承是OO语言(面向对象)挺好的概念,许多OO语言都支持两种继承方式(接口只继承方法签名.实际继承则继承实际的方法),但是 ...
- JS 之继承
ECMAScript继承是通过原型链来继承的.基本思想是利用原型来让一个引用类型继承另一个引用类型的属性和方法,使原型变为另一个对象的实例.通过原型链实现继承时,不能使用对象字面量创建原型方法,避免重 ...
- Javascript实现对象的继承
在Java和C#中,你可以简单的理解class是一个模子,对象就是被这个模子压出来的一批一批月饼.压个啥样,就得是个啥样,不能随便动,动一动就坏了.而在Javascript中,没有模子,月饼被换成了面 ...
- QML使用的内置对象
QML从ECMAScript继承而来,所以支持这个ECMAScript.经常在QML工程中看到Math.Data.....等方法,但是在Qt手册里搜索不到,这是因为这些方法不是QtQuick的,而是E ...
- 【Web】浅析JQuery的apply(), call(), bind()方法
原文地址:https://blog.csdn.net/whuzxq/article/details/64166253 由于在理解this的用法的时候多次出现了这几个方法,个人对这几个方法理解的不是很透 ...
- 学习Vue源码前的几项必要储备(二)
7项重要储备 Flow 基本语法 发布/订阅模式 ES6+ 语法 原型链.闭包 函数柯里化 event loop 接上讲 聊到了ES6的几个重要语法,加下来到第四点继续开始. 4.原型链.闭包 原型链 ...
- ECMAScript中的原型继承
//ECMAScript中的原型继承//ECMAScript中的继承主要是依靠原型链实现的.(关于原型链的介绍,详见<高三>6.3.1章节 P162) //本文示例主要为了说明SubTyp ...
- ECMAScript 实现继承的几种方式
1. 原形链 function Father() { this.fatherName = "licus"; } function Children() { this.chidr ...
随机推荐
- jquery博客收集的IE6中CSS常见BUG全集及解决方案
今天的样式调的纠结,一会这边一会那么把jquery博客折腾的头大,浏览器兼容性.晚上闲着收集一些常见IE6中的BUG 3像素问题及解决办法 当使用float浮动容器后,在IE6下会产生3px的空隙,有 ...
- HDFS 原理、架构与特性介绍--转载
原文地址:http://www.uml.org.cn/sjjm/201309044.asp 本文主要讲述 HDFS原理-架构.副本机制.HDFS负载均衡.机架感知.健壮性.文件删除恢复机制 1:当前H ...
- 【leetcode】Longest Consecutive Sequence
Longest Consecutive Sequence Given an unsorted array of integers, find the length of the longest con ...
- [Linux] AWK命令详解(大全)
转载自:http://caoyanbao.iteye.com/blog/570868 什么是awk? 你可能对UNIX比较熟悉,但你可能对awk很陌生,这一点也不奇怪,的确,与其优秀的功能相比,awk ...
- 高效开发 Android App 的 10 个建议(转)
文章写的非常好,值得大家好好研究研究,仔细分析一下. 引文地址: http://www.cnblogs.com/xiaochao1234/p/3644989.html 假如要Google Play上做 ...
- hadoop命令备忘
hadoop dfsadmin -safemode get 查看namenode是否处于安全模式 hadoop dfsadmin -report 显示文件系统的统计信息,以及所连接的各个datanod ...
- 使yum保留下载的rpm包
[root@14LN yum]# egrep 'cachedir|keepcache' /etc/yum.conf #cachedir=/var/cache/yum/$basearch/$releas ...
- ubuntu下简单的驱动编译
转自:http://www.eefocus.com/jefby1990/blog/13-02/291628_c39b8.html 本文是参考了网上多篇帖子而写的算不上什么原创.唯一值得欣慰的只不过在本 ...
- freopen()——重定向标准输入输出流
freopen()——重定向标准输入输出流 头文件:stdio.h 函数原型:FILE * freopen(const char *filename , const char *type , FIL ...
- html5 表单样式 表单验证1 2 3
html5 表单样式 ie9以下不支持 <!DOCTYPE html> <html lang="en"> <head> <meta cha ...