假设我有2个构造函数和一个成员函数定义
function A() {}
function B() {}
A.prototype.a = function(){}
我已经实例化了
B
。如何强制转换使其成为A
?o = new B();
//What should I put here?
o.a();
我是js新手。而且我有一种感觉,上面提到的
o
是A
还是B
仅受对prototype
的引用控制。因此,我觉得打字应该有可能。欢迎回答以及可以帮助我理解js对象的解释。
最佳答案
一旦创建了对象,您就无法更改(即完全替换掉)对象的原型(但是,在JavaScript的未来版本中,这很有可能)。
但是,JavaScript中的对象具有极大的延展性。您可以这样做,例如:
o.a = A.prototype.a;
...然后
o
将具有a
功能。如果要赋予它A.prototype
的所有可枚举属性(包括其原型中的任何属性):var name;
for (name in A.prototype) {
o[name] = A.prototype[name];
}
函数的
prototype
属性是一个完全普通的无聊对象,分配给函数上的普通无聊属性。当您使用new
使用该函数创建对象(称为“构造函数”)时,该函数的prototype
属性将作为其基础原型分配给新创建的对象(其名称无法访问)在代码[还]中)。从ES5开始(在Chrome,Firefox,Opera和IE9中得到了合理的支持;在IE8和更早版本中不支持),您可以通过
Object.getPrototypeOf
获取对象的原型,还可以创建为对象分配原型的对象,而无需通过构造函数通过使用Object.create
,但是一旦创建了对象原型,就无法更改它。一些JavaScript引擎(例如Firefox中的JavaScript引擎)具有当前称为
__proto__
的当前非标准扩展名,该扩展名使您可以通过将其视为属性来直接访问和操作对象的原型。例如。:o.__proto__ = A.prototype;
...但是目前还不是标准的。不过,它很可能是下一个标准的一部分。如果您对即将发布的ES6感兴趣,可以找到规范草案等here。
关于javascript - 在javascript中强制自定义对象的类型转换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13667905/