实习日志-5
来源:互联网 发布:淘宝商品质量问题定义 编辑:程序博客网 时间:2024/05/21 14:57
实习日志-5(javascript)
深入prototype之实现继承
由于javascript不像某些面向对象语言具有继承的语法,但是我们在很多时候又需要用到继承,所以,这就需要用到prototype chainning(原型链)来实现继承。
例1
function A(){ this.name = 'A'; this.toStirng = funciton(){ return this.name; };};function B(){ this.name = 'B';};//我们想直接通过实例化B输出B的name,但是在这里B并没有toString(),所以,我们通过继承实现它B.prototype = new A(); //通过B.prototype继承A的属性;B.prototype.constructor = B;//这一步很重要,因为我们在通prototye继承A的时候,发生了副作用(改变了B的构造函数)。var b = new B();b.toString();//'B'
例2.1
//直接引用prototype实现继承function A(){ this.name = 'shape';}A.prototype.toString = function() { return this.name;};function B() { this.name = 'B';}B.prototype = A.prototype;B.prototype.constructor = B;var b = new B();b.toString();//'B'// 但是!此例子会出现比较严重的问题,即当在子对象添加prototype.write()时,父对象也会有write()B.prototype.write = function(){ console.log('This is B.');};var a = new A();a.write();//This is B.//这是因为,在这次的继承中,B.prototype与A.prototype指向同一内存空间。
下面我们通过例2.2实现子对象继承父对象且两者互不干扰
例2.2(临时构造符new F())
function A(){ this.name = 'shape';}A.prototype.toString = function() { return this.name;};function B() { this.name = 'B';}var F = function(){}; B.prototype = new F();F.prototype = A.prototype;B.prototype.constructor = B;var b = new B();b.toString();//'B'B.prototype.write = function(){ console.log('This is B.');};var a = new A();a.write();//Uncaught TypeError: a.write is not a function
若想了解更多,可查看书籍
《javascript面向对象编程指南(第二版)》
or
《Object-Oriented JavaScript(Third Edition)》
——2017.7.21实习于
http://map.baidu.com/?newmap=1&s=con%26wd%3D%E6%9D%8F%E6%9E%97%E6%B9%BE%E8%90%A5%E8%BF%90%E4%B8%AD%E5%BF%83%26c%3D194&from=alamap&tpl=mapdots
阅读全文
0 0
- 实习日志5
- 实习日志-5
- 实习日志
- 实习日志
- 实习日志
- 实习日志
- 实习日志(5):Flex页面“跳转”
- 实习日志(一)
- 实习日志(二)
- 实习日志(三)
- 实习日志(四)
- 实习日志(五)
- 实习日志(六)
- 实习日志(七)
- 实习日志(八)
- 光远实习日志
- 实习日志(3.14)
- 生产实习日志
- win10完美去除快捷方式小箭头的方法
- 最近公共祖先(LCA)及其倍增算法实现
- HDU 1258 Sum It Up(DFS)
- (转)并查集详解 杭电1232畅通工程为例
- x-ray图像增强算法
- 实习日志-5
- hadoop2.72集群搭建(亲自实验,技术内容部分转自他人博客)
- C语言中.h文件和.c文件详细解析
- linux下sqlite3的使用
- Java RMI 远程方法调用 基础
- 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
- UMG Spin Box 和 Text Box 限定输入为 Int
- 欢迎使用CSDN-markdown编辑器
- 批量kill进程