`
zhouyrt
  • 浏览: 1125529 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JS在子类中用Object.getPrototypeOf去调用父类方法

阅读更多

每个function有个prototype属性,称为原型,每个对象也有个原型。Firefox/Safari/Chrome/Opera 中可以通过__proto__来访问,IE中没有提供相关接口。

 

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的对象,打印出所有属性。

 

 

ECMA 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上的属性。当然由于js上下文的原因,父类中的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子类用Object.getPrototypeOf去调用父类方法解析

    主要介绍了JavaScript子类用Object.getPrototypeOf去调用父类方法。需要的朋友可以过来参考下,希望对大家有所帮助

    Object.getPrototypeOf:符合ES5规范的Object.getPrototypeOf` shampolyfillreplacement,可在尽可能多的引擎中使用

    object.getprototypeof ES5符合大多数规范的Object.getPrototypeOf sham / polyfill / Object.getPrototypeOf ,可在尽可能多的引擎中使用-特别是支持__proto__或ES6的任何引擎。 内置类型也可以在较旧的引擎中正常...

    Reflect.getPrototypeOf:符合ES2015的大多数规范的“ Reflect.getPrototypeOf” shampolyfillreplacement,可在尽可能多的引擎中使用

    ES2015最符合规范的Reflect.getPrototypeOf sham / Reflect.getPrototypeOf / Reflect.getPrototypeOf ,可在尽可能多的引擎中使用-特别是具有__proto__支持或ES6的任何引擎。 内置类型也可以在较旧的引擎中正常...

    JS实现self的resend

    ECMA V5定义了一个期待已久的方法:Object.getPrototypeOf,它可以无视型别信息得到某对象的原型([[prototype]]),基于此,我们可以构造出一个resend:(请用Chrome 5、IE9预览第三版测试) 代码如下: obj.resend ...

    JavaScript中的原型链prototype介绍

    JavaScript中的继承是通过原型链(prototype chain)来完成的:每个对象内部都有另外一个...2.Object.getPrototypeOf()。可以将对象作为参数传入Object.getPrototypeOf()方法,执行后即返回对象的原型对象。此方法仅在EC

    JavaScript 5th

    ECMA 2009年12月推出了 JavaScript 5,除了增强基础函数库之外,还引入了严格运行时模式(Strict Runtime Modes)以避免代码中的常见错误。 严格模式 ...Object.getPrototypeof() 返回给定对象的原型

    proto-polyfill:为__proto__提供一些限制

    在通常不提供__proto__ Object.defineProperty支持Object.defineProperty , Object.getPrototypeOf , Object.getOwnPropertyNames , Object.getOwnPropertyDescriptor和Object.create旧浏览器中: IE 9 IE 10 ...

    JavaScript程序中实现继承特性的方式总结

    概述 JavaScript的所有对象,都有...var p = Object.getPrototypeOf(obj); 上面代码中,对象p就是对象obj的原型对象。 Object.create方法用于生成一个新的对象,继承指定对象。 var obj = Object.create(p); 上面代

    lizhongzhen11.github.io

    Object.getOwnPropertyDescriptor()和Object.getOwnPropertyDescriptors()还有Object.getPrototypeOf() Web开发中的“黑话” null和undefined 作用域及作用域链 img知识发现 Array.prototype.sort() 学习监听对象...

    snowman:具有信息隐藏功能的不可变、可继承对象

    “超级”通过Object.getPrototypeOf 通过Object.freeze完全不可变的对象 这些功能允许以独占方式共享数据,而无需将其暴露以供修改甚至可读性。 实施细节不再泄漏,使项目免于额外的维护和文档。 数据更安全,即使...

    topiarist:Topiarist为JavaScript提供基于树和形状的类型验证

    该库自由使用了nonnumerable属性和Object.getPrototypeOf 。 因此,它仅适用于Ecmascript 5引擎。 它可以在Ecmascript 6引擎中工作,但是在这种情况下,使用Map和private符号会实现更好的实现。 在做了 在Node.js中...

    理解JavaScript的prototype属性

    Function的原型和它的prototype属性无关 对象的原型可以通过非标准的属性 __proto__ 或ECMAScript5的方法 Object.getPrototypeOf() 访问。 1其实是错的,Object这个原型链尽头的对象它没有原型。可是为了更简单表述...

    knowledge:前置复盘笔记

    知识 约定 + , -含义 ie8+ :包括ie8以及高于ie8的ie浏览器。... (非标准)对象.__proto__等价于: Object.getPrototypeOf(对象)/Object.setPrototypeOf(对象, 原型对象) 目录 前端内容 JS 其他 HTML

    javascript-you-know-nothing:JavaScript

    _.copy = function(source) { // copy has the same prototype as source let copy = Object.create(Object.getPrototypeOf(source)); // also iterate over the kyes which are not enumerable Object....

    tweenjs.min.js文件

    var c=a.prototype,d=Object.getPrototypeOf&&Object;.getPrototypeOf(c)||c.__proto__;if(d){c[(b+="_")+"constructor"]=d.constructor;for(var e in d)c.hasOwnProperty(e)&&"function"==typeof d[e]&&(c[b+e]=d[e...

    跟我学习javascript的prototype,getPrototypeOf和__proto__

    一、深入理解prototype, getPrototypeOf和_ proto _ prototype,getPropertyOf和 _ proto _ 是三个用来访问prototype的方法。它们的命名方式很类似因此很容易带来困惑。 它们的使用方式如下: C.prototype: 一般...

    Chart.js功能与使用方法小结

    主要介绍了Chart.js功能与使用方法,结合实例形式分析了Chart.js功能、使用方法及操作注意事项,需要的朋友可以参考下

    JavaScript的instanceof运算符学习教程

    语法 object instanceof constructor 参数 object: 要检测的对象. constructor: ...// true,因为 Object.getPrototypeOf(o) === C.prototype o instanceof C; // false,因为 D.prototype不在o的原型链

Global site tag (gtag.js) - Google Analytics