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 相关文章推荐
js 加载时自动调整图片大小
May 28 Javascript
JQuery 1.4 中的Ajax问题
Jan 23 Javascript
javascript 自动填写表单的实现方法
Apr 09 Javascript
读jQuery之十三 添加事件和删除事件的核心方法
Aug 23 Javascript
JavaScript中this的使用详解
Nov 08 Javascript
使用jquery菜单插件HoverTree仿京东无限级菜单
Dec 18 Javascript
Bootstrap的modal拖动效果
Dec 25 Javascript
three.js中3D视野的缩放实现代码
Nov 16 Javascript
vue.js将时间戳转化为日期格式的实现代码
Jun 05 Javascript
JavaScript函数apply()和call()用法与异同分析
Aug 10 Javascript
VUE v-model表单数据双向绑定完整示例
Jan 21 Javascript
layui动态渲染生成select的option值方法
Sep 23 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
PHP限制页面只能在微信自带浏览器访问的代码
2014/01/15 PHP
php正则表达式获取内容所有链接
2015/07/24 PHP
php代码检查代理ip的有效性
2016/08/19 PHP
php 实现一个字符串加密解密的函数实例代码
2016/11/01 PHP
PHP CodeIgniter分页实例及多条件查询解决方案(推荐)
2017/05/20 PHP
动态修改DOM 里面的 id 属性的弊端分析
2008/09/03 Javascript
js作用域及作用域链概念理解及使用
2013/04/15 Javascript
jQuery调用Webservice传递json数组的方法
2016/08/06 Javascript
js实现表单及时验证功能 用户信息立即验证
2016/09/13 Javascript
js实现鼠标拖动功能
2017/03/20 Javascript
详解Vue.js项目API、Router配置拆分实践
2018/03/16 Javascript
Electron-vue脚手架改造vue项目的方法
2018/10/22 Javascript
JavaScript工具库之Lodash详解
2019/06/15 Javascript
element-ui中按需引入的实现
2019/12/25 Javascript
js实现详情页放大镜效果
2020/10/28 Javascript
[01:07:15]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第二场 1月25日
2021/03/11 DOTA
python实现的一只从百度开始不断搜索的小爬虫
2013/08/13 Python
用Python编写生成树状结构的文件目录的脚本的教程
2015/05/04 Python
在Python中操作文件之read()方法的使用教程
2015/05/24 Python
python使用pil库实现图片合成实例代码
2018/01/20 Python
Python处理菜单消息操作示例【基于win32ui模块】
2018/05/09 Python
目前最全的python的就业方向
2018/06/05 Python
Python PIL读取的图像发生自动旋转的实现方法
2019/07/05 Python
python 基于dlib库的人脸检测的实现
2019/11/08 Python
python对Excel按条件进行内容补充(推荐)
2019/11/24 Python
在keras下实现多个模型的融合方式
2020/05/23 Python
基于Python的一个自动录入表格的小程序
2020/08/05 Python
HTML5 window/iframe跨域传递消息 API介绍
2013/08/26 HTML / CSS
expedia比利时:预订航班+酒店并省钱
2018/07/13 全球购物
What is the purpose of Void class? Void类的作用是什么?
2016/10/31 面试题
护士自我鉴定
2013/10/23 职场文书
合作协议书模板2014
2014/09/26 职场文书
导游词之蓬莱长岛
2019/12/17 职场文书
pytorch中Schedule与warmup_steps的用法说明
2021/05/24 Python
MySQL 数据库 增删查改、克隆、外键 等操作
2022/05/11 MySQL
Win10鼠标宏怎么设置?win10系统鼠标宏的设置方法
2022/08/14 数码科技