javascript:查找属性所属的原型对象
javascript: find the prototype object to which a property belongs
我有一个来自Square的实例,它继承了Rectangle
instance instanceof Rectangle --> true
instance instanceof Square --> true
instance.area() ; // --> area is defined by Rectangle
现在,在我的代码中,我不知道"区域"函数是在哪里定义的,我想要定义它的原型对象。当然,我可以遍历原型链(未测试)
var proto = instance ;
while( !(proto = Object.getPrototypeOf(proto)).hasOwnProperty('area') ) {}
// do something with 'proto'
然而,我想知道是否有更好/更快的方法来获得函数所属的原型对象?
否。没有。你必须遍历原型链:
function owner(obj, prop) {
var hasOwnProperty = Object.prototype.hasOwnProperty;
while (obj && !hasOwnProperty.call(obj, prop))
obj = Object.getPrototypeOf(obj);
return obj;
}
现在您只需执行:
var obj = owner(instance, "area");
console.log(obj === Rectangle); // true
如果instance
或其原型不具有属性area
,则owner
返回null
。
回复您的评论:您实际上想要的是在继承类的重写函数中调用基类的函数。
在您的情况下,我不想麻烦处理原型链,您可以将base
构建到您的继承模型中:
function Rectangle() {}
Rectangle.prototype.area = function () {
console.log("rectangle");
};
//setting up inheritance
function Square() {}
Square.prototype = Object.create(Rectangle.prototype);
Square.prototype.base = Rectangle.prototype;
Square.prototype.area = function () {
this.base.area();
console.log("square");
};
var square = new Square();
square.area();
FIDDLE
相关文章:
- Node.js中的JavaScript原型对象效率
- 获取原型对象的名称
- 如何维护对原型对象的访问
- 文字与原型对象表示法的数据结构
- 使用原型对象向javascript对象添加自定义属性和方法的建议
- 正在重置原型对象的构造函数属性
- 编写JS原型时,所有函数都应该使用原型对象
- 什么's是原型对象的真实名称
- Javascript - 使用数组作为函数的参数,并在创建新的原型对象时更改值
- 在原型对象 jquery 上将一个按钮与另一个按钮不同
- 原型对象
- 循环遍历数组时的原型对象
- 为什么初始化的 JavaScript 对象不包含原型对象
- JavaScript 原型对象 - 如何访问继承
- Javascript:获取此原型对象名称
- 如何在数据绑定后在 KNOCKOUT js 中使用“with”访问另一个原型对象
- 这在 JavaScript 中的原型对象中的值
- 在主干中向原型对象添加值不起作用
- 删除函数原型对象
- 为什么当我在这个JavaScript对象上使用反射时,我可以'看不到在其原型对象中定义的属性