`
zhouyrt
  • 浏览: 1162248 次
  • 性别: 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去调用父类方法解析

    在Java中,`super`关键字确保了在子类方法中调用父类方法时,`this`仍然指向子类实例。但在JavaScript中,必须手动处理`this`的上下文,如使用`call`、`apply`或箭头函数等方法。 例如,如果在JavaScript中想保持`...

    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的任何引擎。 内置类型也可以在较旧的引擎中正常...

    JavaScript中常用函数方法对象篇.docx

    JavaScript 中常用函数方法对象篇 JavaScript 中的对象是非常重要的概念,它提供了许多实用的函数方法来操作和处理对象。下面我们将介绍一些常用的对象函数方法。 Object.create() Object.create() 方法用于创建...

    基于SSM框架的教务系统

    主要包含学生、教师、管理员三端。 管理员主要包括:课程管理、学生管理、教师管理、账号密码重置等功能。 教师主要包括:我的课程、成绩管理等功能。... 前端采用jsp,数据库采用mysql,具体内容可以参考先参考

    JS中的prototype

    如果子类(如`ExtendClass`)定义了一个与父类同名的方法,那么在调用这个方法时,会优先执行子类的方法。这是因为JavaScript在查找方法时遵循就近原则,即先查找对象自身,再查找原型链。 4. **`call()`方法** ...

    js的原型继承

    以上就是JavaScript中原型继承的详细解释,包括原型对象、原型链、`__proto__`、`Object.getPrototypeOf`、借用构造函数的`call`和`apply`方法,以及常见的继承模式如组合继承和寄生组合继承。理解这些概念对于深入...

    JavaScript中的Object对象学习教程_.docx

    在进行字符串连接时,JavaScript会自动调用此方法。 利用`toString`方法,我们可以推断值的类型。例如,`Object.prototype.toString.call(value)`可以返回`[object Type]`的形式,其中`Type`是值的类型。这使得我们...

    JavaScript中的prototype(原型)属性研究

    需要注意的是,现代浏览器和Node.js环境已经不再推荐直接修改或使用`__proto__`属性,而是应该使用`Object.setPrototypeOf`和`Object.getPrototypeOf`方法。 ### 原型和性能 虽然原型链提供了强大的继承机制,但...

    js代码-手写Object.create

    在JavaScript中,`Object.create`是一个非常重要的方法,它用于创建一个新的对象,并将该对象的原型设置为传入的对象。这个方法在实现继承和构造函数的链式调用时非常关键。下面我们将深入探讨`Object.create`的工作...

    The Principles of Object Oriented.JavaScript

    - **构造函数继承**:在子类构造函数中调用父类构造函数,通过借用构造函数的方式继承父类的属性和方法。 #### 六、JavaScript中的多态 多态是指同样的方法在不同对象上表现不同的行为。在JavaScript中,多态可以...

    JavaScript中的原型继承基础学习教程_.docx

    `Object.getPrototypeOf`方法用于获取一个对象的原型,它是标准的且在所有现代浏览器中都支持,包括IE9及以上版本。例如: ```javascript console.log(Object.getPrototypeOf(rabbit) === animal); // true ``` ...

    第四章(js高级程序设计学习笔记)----2

    在本节中,我们将深入探讨JavaScript的高级程序设计,特别是关注"第四章(js高级程序设计学习笔记)----2"的主题。这一章很可能涵盖了JavaScript的核心概念,包括原型链(Prototype Chaining)。通过阅读名为...

    js代码-实现Object.create

    在JavaScript中,`Object.create` 是一个非常重要的方法,它用于创建一个新的对象,并将该新对象的原型设置为传入的对象。这意味着新对象会继承传入对象的属性和方法。这个功能是基于JavaScript的原型继承机制,是...

    java script 继承的实现

    在 JavaScript 中,继承是面向对象编程的一个关键特性,它允许一个对象(子类)获取另一个对象(父类)的属性和方法。在本文中,我们将深入探讨JavaScript中实现继承的不同方式,并重点关注描述中提到的"xbObjects....

    2021年前端笔试题-面试真题及答案.pdf

    这个方法使用了Object.getPrototypeOf方法来获取对象的原型,然后遍历原型链,直到找到构造函数的prototype对象或达到原型链的末尾。 3. 手写new操作符 new操作符在调用的过程中会发生四件事情:首先创建了一个新...

    js继承

    在JavaScript中,继承允许一个对象(子类)获取另一个对象(父类)的属性和方法,从而实现代码复用和创建复杂的类层次结构。下面将详细探讨JavaScript中的几种继承方式。 1. 原型链继承 这是JavaScript中最基本的...

Global site tag (gtag.js) - Google Analytics