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

Object.getPrototypeOf

 
阅读更多

 

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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 in m.__proto__){
    alert(a);
}

定义了父类Person,子类Man。new一个Man的对象,打印出所有属性。

ECMAScript V5为Object添加了静态的getPrototypeOf方法( Firefox/Chrome已实现 ),用来获取对象的原型。用它可以模仿Java的super。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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不能在子类中不能很好的自动转换,需要一些技巧完成。

 

分享到:
评论

相关推荐

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

    这里我们将深入探讨如何使用`Object.getPrototypeOf`来实现这一目标。 首先,让我们理解`Object.getPrototypeOf`这个内置函数的作用。它返回一个对象的原型,也就是该对象在其原型链上的父对象。在JavaScript中,每...

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

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

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

    ECMAScript 5引入了一个静态方法`Object.getPrototypeOf`,用于获取一个对象的原型。 在JavaScript的继承模型中,子类可以通过`prototype`链来调用父类的方法。`Object.getPrototypeOf`方法可以用于在子类实例中...

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

    Object.getPrototypeOf() 方法返回指定对象的原型对象。 Object.freeze() Object.freeze() 方法用于冻结一个对象,使其不能被修改,不能添加新的属性,不能删除已有属性,不能修改属性的可枚举性、可配置性等。 ...

    基于SSM框架的教务系统

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

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

    当我们创建一个函数实例时,实例会自动获取一个内部属性[[Prototype]],这个属性通常通过`__proto__`或者`Object.getPrototypeOf`方法访问,它引用的就是函数的prototype属性所指向的对象。 ### prototype的用途 1....

    js中的继承与原型链1

    - `Object.getPrototypeOf(object)` 返回对象的原型,即`object`的`[[Prototype]]`。 - `Object.setPrototypeOf(object, proto)` 更改对象的原型,将其设置为`proto`。 ### 示例:继承与原型链 在上述例子中,`...

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

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

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

    2. `Object.getPrototypeOf(obj)`:获取对象的原型对象,即`__proto__`属性的值。 Object实例对象的两个重要方法: 1. `Object.prototype.valueOf()`:返回对象的值。默认情况下,它返回对象本身。在类型转换时,...

    js的原型继承

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

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

    console.log(Object.getPrototypeOf(obj) === Object.prototype); // 输出 "true" ``` ### 总结 JavaScript的原型链是实现面向对象编程的关键机制。通过理解`__proto__`、`prototype`、构造函数、`new`操作符以及`...

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

    在其他浏览器中,可以使用`Object.getPrototypeOf`来获取一个对象的原型。此外,`__proto__`的正式名称是`[[Prototype]]`,但通常我们讨论时会简化为`prototype`。 为了在不依赖`__proto__`的情况下处理原型,...

    js原型链与继承解析(初体验).docx

    在JavaScript中,每个对象都有一个内部属性`[[Prototype]]`,通常可以通过`__proto__`或`Object.getPrototypeOf`来访问。这个属性链接了对象到它的原型对象,形成了一条链,即所谓的原型链。 首先,我们来看一个...

    08-手写instanceof.md

    在这个示例中,我们使用`Object.getPrototypeOf`方法来获取实例对象的原型,并通过一个while循环来进行遍历,当发现原型等于构造函数的prototype属性时,函数返回true,否则继续向上查找。如果到达原型链的尽头,...

    js代码-手写Object.create

    每个JavaScript对象都有一个内部属性`[[Prototype]]`,通常通过`__proto__`(非标准)或`Object.getPrototypeOf`访问。当试图访问对象的一个属性时,如果该对象本身没有该属性,JavaScript会向上查找其`[[Prototype]...

    自己整理的一些前端面试笔试题pdf.pdf

    let proto = Object.getPrototypeOf(left), prototype = right.prototype; while (true) { if (!proto) return false; if (proto === prototype) return true; proto = Object.getPrototypeOf(proto); } } ``...

    前端大厂最新面试题-typeof_instanceof.docx

    // getPrototypeOf 是 Object 对象自带的 API,能够拿到参数的原型对象 let proto = Object.getPrototypeOf(left); while (true) { if (proto === null) return false; if (proto === right.prototype) return ...

    2021最新前端笔试题汇总.pdf

    let proto = Object.getPrototypeOf(left), prototype = right.prototype; while (true) { if (!proto) return false; if (proto === prototype) return true; proto = Object.getPrototypeOf(proto); } } ``...

Global site tag (gtag.js) - Google Analytics