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 相关文章推荐
cssQuery()的下载与使用方法
Jan 12 Javascript
JavaScript接口实现代码 (Interfaces In JavaScript)
Jun 11 Javascript
javascript学习笔记(十四) window对象使用介绍
Jun 20 Javascript
jQuery动画特效实例教程
Aug 29 Javascript
JavaScript声明变量名的语法规则
Jul 10 Javascript
详解JavaScript编程中正则表达式的使用
Oct 25 Javascript
js实现点击每个li节点,都弹出其文本值及修改
Dec 15 Javascript
js实现百度登录框鼠标拖拽效果
Mar 07 Javascript
JS对象深度克隆实例分析
Mar 16 Javascript
JavaScript中document.referrer的用法详解
Jul 04 Javascript
JavaScript判断输入是否为数字类型的方法总结
Sep 28 Javascript
使用Angular CLI进行单元测试和E2E测试的方法
Mar 24 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
《心理测量者3》剧场版动画预告
2020/03/02 日漫
php设计模式 Adapter(适配器模式)
2011/06/26 PHP
yii2.0整合阿里云oss上传单个文件的示例
2017/09/19 PHP
php xhprof使用实例详解
2019/04/15 PHP
Thinkphp整合阿里云OSS图片上传实例代码
2019/04/28 PHP
WordPress 照片lightbox效果的运用几点
2009/06/22 Javascript
jQuery setTimeout()函数使用方法
2013/04/07 Javascript
javascript常用对话框小集
2013/09/13 Javascript
JS 页面计时器示例代码
2013/10/28 Javascript
window.onload追加函数使用示例
2014/03/03 Javascript
Javascript的严格模式strict mode详细介绍
2014/06/06 Javascript
JavaScript子窗口调用父窗口变量和函数的方法
2015/10/09 Javascript
简介BootStrap model弹出框的使用
2016/04/27 Javascript
jQuery实现页面下拉100像素出现悬浮窗口的方法
2016/09/05 Javascript
详解vue服务端渲染(SSR)初探
2017/06/19 Javascript
jQuery 中msgTips 顶部弹窗效果实现代码
2017/08/14 jQuery
JavaScript中的E-mail 地址格式验证
2018/03/28 Javascript
JavaScript求一个数组中重复出现次数最多的元素及其下标位置示例
2018/07/23 Javascript
vue项目打包部署_nginx代理访问方法详解
2018/09/20 Javascript
js实现点击展开隐藏效果(实例代码)
2018/09/28 Javascript
vue表单验证你真的会了吗?vue表单验证(form)validate
2019/04/07 Javascript
vue+elementUI实现简单日历功能
2020/09/24 Javascript
[02:05:03]完美世界DOTA2联赛循环赛 LBZS VS Matador BO2 10.28
2020/10/28 DOTA
python设置windows桌面壁纸的实现代码
2013/01/28 Python
python实现可将字符转换成大写的tcp服务器实例
2015/04/29 Python
python脚本设置超时机制系统时间的方法
2016/02/21 Python
你应该知道的python列表去重方法
2017/01/17 Python
深入理解Python3 内置函数大全
2017/11/23 Python
安装python3的时候就是输入python3死活没有反应的解决方法
2018/01/24 Python
python3通过qq邮箱发送邮件以及附件
2020/05/20 Python
Python 实现将numpy中的nan和inf,nan替换成对应的均值
2020/06/08 Python
为什么要有struct关键字
2012/05/08 面试题
软件毕业生个人鉴定
2014/03/03 职场文书
学雷锋演讲稿汇总
2014/05/10 职场文书
中学音乐课教学反思
2016/02/18 职场文书
Nginx服务器添加Systemd自定义服务过程解析
2021/03/31 Servers