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 a 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不能在子类中不能很好的自动转换,需要一些技巧完成。
相关推荐
这里我们将深入探讨如何使用`Object.getPrototypeOf`来实现这一目标。 首先,让我们理解`Object.getPrototypeOf`这个内置函数的作用。它返回一个对象的原型,也就是该对象在其原型链上的父对象。在JavaScript中,每...
object.getprototypeof ES5符合大多数规范的Object.getPrototypeOf sham / polyfill / Object.getPrototypeOf ,可在尽可能多的引擎中使用-特别是支持__proto__或ES6的任何引擎。 内置类型也可以在较旧的引擎中正常...
ECMAScript 5引入了一个静态方法`Object.getPrototypeOf`,用于获取一个对象的原型。 在JavaScript的继承模型中,子类可以通过`prototype`链来调用父类的方法。`Object.getPrototypeOf`方法可以用于在子类实例中...
Object.getPrototypeOf() 方法返回指定对象的原型对象。 Object.freeze() Object.freeze() 方法用于冻结一个对象,使其不能被修改,不能添加新的属性,不能删除已有属性,不能修改属性的可枚举性、可配置性等。 ...
主要包含学生、教师、管理员三端。 管理员主要包括:课程管理、学生管理、教师管理、账号密码重置等功能。 教师主要包括:我的课程、成绩管理等功能。... 前端采用jsp,数据库采用mysql,具体内容可以参考先参考
当我们创建一个函数实例时,实例会自动获取一个内部属性[[Prototype]],这个属性通常通过`__proto__`或者`Object.getPrototypeOf`方法访问,它引用的就是函数的prototype属性所指向的对象。 ### prototype的用途 1....
- `Object.getPrototypeOf(object)` 返回对象的原型,即`object`的`[[Prototype]]`。 - `Object.setPrototypeOf(object, proto)` 更改对象的原型,将其设置为`proto`。 ### 示例:继承与原型链 在上述例子中,`...
这个方法使用了Object.getPrototypeOf方法来获取对象的原型,然后遍历原型链,直到找到构造函数的prototype对象或达到原型链的末尾。 3. 手写new操作符 new操作符在调用的过程中会发生四件事情:首先创建了一个新...
2. `Object.getPrototypeOf(obj)`:获取对象的原型对象,即`__proto__`属性的值。 Object实例对象的两个重要方法: 1. `Object.prototype.valueOf()`:返回对象的值。默认情况下,它返回对象本身。在类型转换时,...
以上就是JavaScript中原型继承的详细解释,包括原型对象、原型链、`__proto__`、`Object.getPrototypeOf`、借用构造函数的`call`和`apply`方法,以及常见的继承模式如组合继承和寄生组合继承。理解这些概念对于深入...
console.log(Object.getPrototypeOf(obj) === Object.prototype); // 输出 "true" ``` ### 总结 JavaScript的原型链是实现面向对象编程的关键机制。通过理解`__proto__`、`prototype`、构造函数、`new`操作符以及`...
在其他浏览器中,可以使用`Object.getPrototypeOf`来获取一个对象的原型。此外,`__proto__`的正式名称是`[[Prototype]]`,但通常我们讨论时会简化为`prototype`。 为了在不依赖`__proto__`的情况下处理原型,...
在JavaScript中,每个对象都有一个内部属性`[[Prototype]]`,通常可以通过`__proto__`或`Object.getPrototypeOf`来访问。这个属性链接了对象到它的原型对象,形成了一条链,即所谓的原型链。 首先,我们来看一个...
在这个示例中,我们使用`Object.getPrototypeOf`方法来获取实例对象的原型,并通过一个while循环来进行遍历,当发现原型等于构造函数的prototype属性时,函数返回true,否则继续向上查找。如果到达原型链的尽头,...
每个JavaScript对象都有一个内部属性`[[Prototype]]`,通常通过`__proto__`(非标准)或`Object.getPrototypeOf`访问。当试图访问对象的一个属性时,如果该对象本身没有该属性,JavaScript会向上查找其`[[Prototype]...
let proto = Object.getPrototypeOf(left), prototype = right.prototype; while (true) { if (!proto) return false; if (proto === prototype) return true; proto = Object.getPrototypeOf(proto); } } ``...
// getPrototypeOf 是 Object 对象自带的 API,能够拿到参数的原型对象 let proto = Object.getPrototypeOf(left); while (true) { if (proto === null) return false; if (proto === right.prototype) return ...
let proto = Object.getPrototypeOf(left), prototype = right.prototype; while (true) { if (!proto) return false; if (proto === prototype) return true; proto = Object.getPrototypeOf(proto); } } ``...