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

原创 2013年12月05日 16:26:03
每个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。
 代码如下:
unity3d脚本http://www.unitymanual.com/
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();
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

子类和父类方法循环调用,栈溢出错误分析

1、工作中遇到了一个问题,执行抛出错误 这是一个栈溢出的错误。 分析代码,原因是,一个对话框类间接继承了java.awt.Dialog和java.awt.Component,又自己实现了show()...
  • nyhyn
  • nyhyn
  • 2015-04-20 18:11
  • 557

例题:子类重写父类方法后的调用规则

例题: (单选题) 下面代码的输出是什么? public class Base { private String baseName= "base"; public Base(){...

子类调用父类方法:c++和java的不同

子类调用父类方法:c++和java的不同   bool GameScene::init(){ if (!Scene::init()) { return false; } } 我自定义了一个...

leetcode:Peeking Iterator 迭代器继承,父类调用子类方法

Given an Iterator class interface with methods: next() and hasNext(), design and implement a Peeking...

子类调用父类方法中的this

一直都说this指的是当前对象,super指的是父类对象。但是对这个this理解还是不透彻,今天看effective java 第14条,有个例子一直不理解: package com.zgd; p...

Python 在子类中调用父类方法详解(单继承、多层继承、多重继承)

测试环境:win7 64位Python版本:Python 3.3.5代码实践:1、在子类中通过“类名”调用父类的方法class FatherA: def __init__(self): ...

java方法重写的时候,一个调用父类还是子类方法的问题

====================================================== 注:本文源代码点此下载 =============================...

SubClasing用法--子类重写父类方法,父类直接调用实现方式

subclasing 浅谈 --  父类和子类之间进行消息传递的一种实现 继承:一个派生类可以从一个基类派生,这个派生类就是子类,当子类继承父类之后,可以重写父类的方法或者直接调用父类的方法,即子类...

从0自学C#13--子类和父类方法的锁对象问题

调用父类方法时,如何与子类方法,在锁对象不是同一个实例下,能线程安全。

子类extends父类方法执行顺序

不解释自己看: 父类:Person public class Person{ String name; int age; { System.out.println("父类的非静态代码块"...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)