gpt4 book ai didi

javascript - 在javascript中强制对自定义对象进行类型转换

转载 作者:行者123 更新时间:2023-11-30 13:11:40 26 4
gpt4 key购买 nike

假设我定义了 2 个构造函数和一个成员函数

function A() {}
function B() {}
A.prototype.a = function(){}

我已经实例化了一个 B。如何强制转换以使其成为 A

o = new B();
//What should I put here?
o.a();

我是 js 新手。而且我有一种感觉,上面提到的 oA 还是 B 仅由对 prototype< 的引用控制。因此,我觉得类型转换应该是可能的。

欢迎回答,以及可以帮助我理解 js 对象的解释。

最佳答案

对象的原型(prototype)一旦创建就无法更改(即完全换出)(但是;在未来的 JavaScript 版本中,这可能是可能的)。

不过,JavaScript 中的对象具有极大的可塑性。你可以这样做,例如:

o.a = A.prototype.a;

...然后 o 将具有 a 功能。如果您想为它提供 A.prototype 的所有可枚举属性(包括 its 原型(prototype)中的任何属性):

var name;
for (name in A.prototype) {
o[name] = A.prototype[name];
}

函数的 prototype 属性是一个完全普通的、无聊的对象,分配给函数的普通、无聊的属性。当您使用 new 创建一个使用该函数(称为“构造函数”)的对象时,该函数的 prototype 属性被分配给新创建的对象作为它的底层原型(prototype)([还]没有您可以在代码中访问的名称)。

从 ES5 开始(在 Chrome、Firefox、Opera 和 IE9 中合理支持;在 IE8 和更早版本中不支持),您可以通过 Object.getPrototypeOf获取对象的原型(prototype)。 ,并且您可以创建对象并为其分配原型(prototype),而无需使用 Object.create 构造函数。 , 但对象的原型(prototype)一旦创建就无法更改。

一些 JavaScript 引擎(如 Firefox 中的引擎)有一个当前非标准的扩展,称为 __proto__,它允许您通过将对象的原型(prototype)视为属性来直接访问和操作对象的原型(prototype)。例如:

o.__proto__ = A.prototype;

...但这不是目前的标准。不过,它很可能成为下一个标准的一部分。如果您对有关即将推出的 ES6 的信息感兴趣,可以找到规范草案等 here .

关于javascript - 在javascript中强制对自定义对象进行类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13667905/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com