javascript-更改对象原型以更改instanceof结果的好方法?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-更改对象原型以更改instanceof结果的好方法?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1641字,纯文字阅读大概需要3分钟。
内容图文
![javascript-更改对象原型以更改instanceof结果的好方法?](/upload/InfoBanner/zyjiaocheng/674/e8b6c628bddc4543a33bbfd243c0ded4.jpg)
我想评论this old question,但似乎已被锁定.
这是我的用例:
>使用构造函数Base创建对象obj. obj instanceof Base返回true.
>我想更改obj的原型,使其看起来好像obj是从Derived构造的.那就是我想要
> obj可以访问Derived的方法
> obj instanceof派生返回true
原因是obj将在层次结构中具有一个类型,该类型在创建时是未知的,并由其后的状态决定.我希望能够将其向下移动到层次结构中.
我相信我可以做到
obj .__ proto__ =派生原型
但是__proto__将在下一版JavaScript中弃用.自从我上面链接的问题被提出以来,proxies API发生了变化,它似乎不支持我的用例.
对于我的用例,现在是否存在替代方案,或者计划在将来使用?
我现在看到的唯一替代方法是使用
obj2 = Object.create(Derived.prototype);
obj2.extend(obj);
并且永远不会存储超过一个对obj的引用,但是这样做会带来很大的不便.
这是演示该问题的fiddle.
解决方法:
我认为不可能这样做.如RobG所示,您可以通过更改损害类的prototype属性来使instanceof返回false.
看到这一点,我想您可以使用一个额外的类来做到这一点,就像普通Object.create shim中的F一样:
Object.newChangeable = function create(b) {
function F(){b.call(this);}
F.prototype = b.prototype;
var f = new F();
f.change = function change(n) {
F.prototype = n.prototype;
};
return f;
}
var obj = Object.newChangeable(Base);
obj instanceof Base; // true
obj.change(Derived);
但不是:
obj instanceof Derived; // still false
obj instanceof Base; // still true
因为obj的内部[[Prototype]]仍然指向与Base.prototype相同的对象.您可以做的就是使Derived成为新的基础:
var obj = new Base;
obj instanceof Base; // true
Derived.prototype = Base.prototype;
Base.prototype = {}; // something else
alert(obj instanceof Derived); // true
alert(obj instanceof Base); // false
但是我不认为这就是您想要的,而是操纵表达式的右侧而不是在obj处进行更改:-)
内容总结
以上是互联网集市为您收集整理的javascript-更改对象原型以更改instanceof结果的好方法?全部内容,希望文章能够帮你解决javascript-更改对象原型以更改instanceof结果的好方法?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。