JavaScript子类用Object.getPrototypeOf去调用父类方法解析


Posted in Javascript onDecember 05, 2013

每个function有个prototype属性,称为原型。每个对象也有个原型,Firefox/Safari/Chrome/Opera 中可以通过__proto__来访问,IE6/7/8中没有提供相关接口。

function Person(){ 
    this.method1 = function(){} 
} 
Person.prototype.method2 = function(){} function Man(){} 
Man.prototype = new Person(); 
Man.prototype.m1 = function(){} 
Man.prototype.m2 = function(){} 
var m = new Man(); 
for(var a in m.__proto__){ 
    alert(a); 
}

定义了父类Person,子类Man。new一个Man的对象,打印出所有属性。

ECMAScript V5为Object添加了静态的getPrototypeOf方法( Firefox/Chrome已实现 ),用来获取对象的原型。用它可以模仿Java的super。

function Person(){ 
    this.method1 = function(){alert(1)} 
} 
Person.prototype.method2 = function(){alert(2);} function Man(){ 
    this.m1 = function(){ 
        Object.getPrototypeOf(this).method1(); 
    } 
} 
Man.prototype = new Person();//原型继承 
Man.prototype.m2 = function(){ 
    Object.getPrototypeOf(this).method2(); 
} 
  
var man = new Man(); 
man.m1(); 
man.m2();

子类Man中挂在this上的m1方法中调用父类Person中挂在this上的method1,挂在prototype上的m2方法调用父类prototype上的method2。

以上可以看出对象原型不但包括其构造器prototype上的属性,也包括构造器中this上的属性。当然由于JavaScript中上下文的原因,父类中的this不能在子类中不能很好的自动转换,需要一些技巧完成。

Java中是这样的

package bao1; class Person { 
    private String name; 
    Person(String name) { 
        this.name = name; 
    } 
    public void method1() { 
        System.out.println(this.name); 
    } 
} 
class Man extends Person{ 
    Man(String name) { 
        super(name); 
    }    
    public void m1() { 
        super.method1(); 
    } 
} 
public class Test { 
    public static void main(String[] args) {         
        Man man1 = new Man("Jack"); 
        man1.m1(); 
    } 
}
Javascript 相关文章推荐
初学JavaScript_03(ExtJs Grid的简单使用)
Oct 02 Javascript
CSS+Jquery实现页面圆角框方法大全
Dec 24 Javascript
jquery聚焦文本框与扩展文本框聚焦方法
Oct 12 Javascript
javascript实现下雪效果【实例代码】
May 03 Javascript
解析ajaxFileUpload 异步上传文件简单使用
Dec 30 Javascript
Angularjs根据json文件动态生成路由状态的实现方法
Apr 17 Javascript
vue2.0 better-scroll 实现移动端滑动的示例代码
Jan 25 Javascript
js中Object.defineProperty()方法的不详解
Jul 09 Javascript
详解如何创建并发布一个 vue 组件
Nov 08 Javascript
JS实现打字游戏
Dec 17 Javascript
JavaScript canvas基于数组生成柱状图代码实例
Mar 06 Javascript
解决vue自定义指令导致的内存泄漏问题
Aug 04 Javascript
jQuery表格插件ParamQuery简单使用方法示例
Dec 05 #Javascript
各浏览器对document.getElementById等方法的实现差异解析
Dec 05 #Javascript
给事件响应函数传参数的四种方式小结
Dec 05 #Javascript
弹出最简单的模式化遮罩层的js代码
Dec 04 #Javascript
js如何设置在iframe框架中指定div不显示
Dec 04 #Javascript
jquery动态改变onclick属性导致失效的问题解决方法
Dec 04 #Javascript
javascript设置金额样式转换保留两位小数示例代码
Dec 04 #Javascript
You might like
短波问题解答
2021/02/28 无线电
Banner程序
2006/10/09 PHP
thinkPHP的Html模板标签使用方法
2012/11/13 PHP
thinkphp5实现微信扫码支付
2019/12/23 PHP
javascript 二维数组的实现与应用
2010/03/16 Javascript
js 遍历json返回的map内容示例代码
2013/10/29 Javascript
深入理解JavaScript高级之词法作用域和作用域链
2013/12/10 Javascript
jQuery拖动div、移动div、弹出层实现原理及示例
2014/04/08 Javascript
JavaScript数据结构和算法之图和图算法
2015/02/11 Javascript
微信+angularJS的SPA应用中用router进行页面跳转,jssdk校验失败问题解决
2016/09/09 Javascript
简单实现Vue的observer和watcher
2016/12/21 Javascript
input获取焦点时底部菜单被顶上来问题的解决办法
2017/01/24 Javascript
微信小程序 request接口的封装实例代码
2017/04/26 Javascript
vue.js开发环境搭建教程
2017/05/04 Javascript
js实现文字列表无缝滚动效果
2017/06/23 Javascript
AngularJS基于http请求实现下载php生成的excel文件功能示例
2018/01/23 Javascript
实例详解Vue项目使用eslint + prettier规范代码风格
2018/08/20 Javascript
vue 插件的方法代码详解
2019/06/06 Javascript
jQuery实现tab栏切换效果
2020/12/22 jQuery
python3.4实现邮件发送功能
2018/05/28 Python
python实现梯度下降算法
2020/03/24 Python
对python中的try、except、finally 执行顺序详解
2019/02/18 Python
python 字典 setdefault()和get()方法比较详解
2019/08/07 Python
Python通过socketserver处理多个链接
2020/03/18 Python
Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
2020/04/08 Python
Python实现aes加密解密多种方法解析
2020/05/15 Python
mac系统下安装pycharm、永久激活、中文汉化详细教程
2020/11/24 Python
python如何发送带有附件、正文为HTML的邮件
2021/02/27 Python
HTML5手机端弹出遮罩菜单特效代码
2016/01/27 HTML / CSS
意大利在线高尔夫商店:Online Golf
2021/03/09 全球购物
美德好少年主要事迹
2014/01/29 职场文书
检讨书范文500字
2015/01/28 职场文书
2015年外联部工作总结
2015/04/03 职场文书
个人借条范本
2015/05/25 职场文书
MySQL数据库安装方法与图形化管理工具介绍
2022/05/30 MySQL
win sever 2022如何占用操作主机角色
2022/06/25 Servers