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下阻止表单重复提交、防刷新、防后退
Aug 17 Javascript
兼容最新firefox、chrome和IE的javascript图片预览实现代码
Aug 08 Javascript
jQuery中:input选择器用法实例
Jan 03 Javascript
jQuery实现简单的点赞效果
May 29 Javascript
JS获取鼠标坐标位置实例分析
Jan 20 Javascript
把json格式的字符串转换成javascript对象或数组的方法总结
Nov 03 Javascript
EasyUI修改DateBox和DateTimeBox的默认日期格式示例
Jan 18 Javascript
关于vue.extend和vue.component的区别浅析
Aug 16 Javascript
Angular.js通过自定义指令directive实现滑块滑动效果
Oct 13 Javascript
angular4中*ngFor不能对返回来的对象进行循环的解决方法
Sep 12 Javascript
JavaScript的词法结构精华篇
Oct 17 Javascript
微信小程序HTTP接口请求封装的实现
Feb 21 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
php5.2 Json不能正确处理中文、GB编码的解决方法
2014/03/28 PHP
javascript 原型继承介绍
2011/08/30 Javascript
ASP.NET jQuery 实例10 动态修改hyperlink的URL值
2012/02/03 Javascript
Javascript生成json的函数代码(可以用php的json_decode解码)
2012/06/11 Javascript
Javascript随机标签云代码实例
2016/06/21 Javascript
jQuery的Each比JS原生for循环性能慢很多的原因
2016/07/05 Javascript
浅谈JS中String()与 .toString()的区别
2016/10/20 Javascript
echarts3 使用总结(绘制各种图表,地图)
2017/01/05 Javascript
JavaScript文件的同步和异步加载的实现代码
2017/08/19 Javascript
使用Vue.js和Flask来构建一个单页的App的示例
2018/03/21 Javascript
Js经典案例的实例代码
2018/05/10 Javascript
如何使用puppet替换文件中的string
2018/12/06 Javascript
Vue中JS动画与Velocity.js的结合使用
2019/02/13 Javascript
微信小程序实现手指拖动选项排序
2020/04/22 Javascript
Python机器学习logistic回归代码解析
2018/01/17 Python
Python pandas常用函数详解
2018/02/07 Python
Tensorflow的可视化工具Tensorboard的初步使用详解
2018/02/11 Python
python解决pandas处理缺失值为空字符串的问题
2018/04/08 Python
Python除法之传统除法、Floor除法及真除法实例详解
2019/05/23 Python
pandas基于时间序列的固定时间间隔求均值的方法
2019/07/04 Python
使用python os模块复制文件到指定文件夹的方法
2019/08/22 Python
Python中的相关分析correlation analysis的实现
2019/08/29 Python
使用python对excel表格处理的一些小功能
2021/01/25 Python
纯css3实现宠物小鸡实例代码
2018/10/08 HTML / CSS
HTML5的标签的代码的简单介绍 HTML5标签的简介
2012/05/28 HTML / CSS
HTML5 textarea高度自适应的两种方案
2020/04/08 HTML / CSS
出门问问全球官方商城:Tichome音箱和TicWatch智能手表
2017/12/02 全球购物
阿迪达斯新加坡官方网站:adidas新加坡
2019/12/06 全球购物
泰国Robinson百货官网:购买知名品牌的商品
2020/02/08 全球购物
小学毕业感言300字
2014/02/19 职场文书
员工趣味活动方案
2014/08/27 职场文书
婚前协议书范本两则
2014/10/16 职场文书
汤姆索亚历险记读书笔记
2015/06/29 职场文书
寒假生活随笔
2015/08/15 职场文书
浅谈redis五大数据结构和使用场景
2021/04/12 Redis
一文搞懂Java中的注解和反射
2022/06/21 Java/Android