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();
    }
}

javascript中子类调用父类方法解决方案

捕风之巢 导航 BlogJava首页新随笔联系聚合管理 2014年10月 > 日 一 二 三 ...
  • rainxie_
  • rainxie_
  • 2014年10月11日 11:21
  • 1542

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

每个function有个prototype属性,称为原型。每个对象也有个原型,Firefox/Safari/Chrome/Opera 中可以通过__proto__来访问,IE6/7/8中没有提供相关接...
  • u012890836
  • u012890836
  • 2013年11月25日 20:47
  • 279

JS实现子类调用父类的同名函数函数

图像的实现 代码实现 function parent() { this.initialize = function() { this.x = 1; this.y = 1; }, th...
  • sakawa_x
  • sakawa_x
  • 2016年10月12日 19:57
  • 1792

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

http://www.cnblogs.com/snandy/archive/2011/03/23/1992080.html
  • baidu_31333625
  • baidu_31333625
  • 2017年04月25日 18:11
  • 133

子类可以直接使用父类的变量、方法吗?

今天通过看嘉扬哥的代码 发现一个一直没注意到的问题:      子类可以直接使用父类的变量吗?     答案 :可以 (只能是 protected  public 修饰的  成员变量)。 ...
  • leng_wen_rou
  • leng_wen_rou
  • 2016年07月22日 12:12
  • 3449

C#里的父类对象引用子类实例的理解

面向对象的多态  //父类可以引用子类对象。             //父类引用只能调用子类继承父类的方法,父类引用不能调用子类独有的方法。             People ne...
  • kangk1992
  • kangk1992
  • 2012年09月06日 14:48
  • 6762

JS中子类中如何调用父类的同名方法(继承时候,父类的同名方法被覆盖了)

继承时候,同名方法发生覆盖了,通过在临时私有变量先保存超类的同名方法,然后在子类同名方法中调用即可! function A() {   //通过call传递进来的this就是var b=new B...
  • liangklfang
  • liangklfang
  • 2015年09月05日 18:28
  • 4346

Java 中父类怎么调用子类的方法?

Java中父类可以调用子类方法吗?
  • qq_25827845
  • qq_25827845
  • 2016年10月24日 22:41
  • 17538

java 父类子类同名方法的调用

如果父类的引用p指向了子类的实例,则通过这个引用p访问同名方法时,调用的是子类重写的方法。父类引用p可以指向不同的子类,调用不同子类重写的不同的同名方法, 这样达到类间多态的效果。 但是,父类的引用只...
  • qq_21808961
  • qq_21808961
  • 2017年10月22日 12:15
  • 429

JavaScript中子类调用父类方法

sdfsad     Shape = function () {         this.id = null;         this.picture = null;   ...
  • kakaka2011
  • kakaka2011
  • 2013年03月06日 19:22
  • 1763
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JavaScript子类用Object.getPrototypeOf去调用父类方法解析
举报原因:
原因补充:

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