0

好奇心から、そして私が心に留めている小さな実験を行うために、作成されたオブジェクトのタイプを変更することは可能ですか?

タイプを変更することで、次のように、オブジェクトを instanceof 演算子に応答させることを意味します。

(ご覧のとおり、コンストラクターを変更してみましたが、うまくいきませんでした)

var MyConstructor = function() { this.name = 'no name' };
undefined

var myInstance = { name: 'some name' }
undefined

myInstance instanceof Object
true

myInstance instanceof MyConstructor
false

myInstance.constructor
function Object() { [native code] }

myInstance.constructor = MyConstructor
function () { this.name = 'no name' }

myInstance instanceof Object
true

myInstance instanceof MyConstructor
false

new MyConstructor() で新しいオブジェクトを作成し、そこからすべてのプロパティを削除してから、myInstance からすべてのプロパティをコピーできると思いますが、もっと簡単な方法があるかどうか疑問に思っていました...

- アップデート -

プロパティの存在は知ってい__proto__ますが、ほとんどのブラウザーで実装されているイベントが標準の一部ではないことを知っているため、事前に破棄しました。

4

3 に答える 3

4

JavaScript はプロトタイプのベース言語であるため、メソッドはオブジェクトの属性instanceofをチェックしています。__proto__

だからあなたの質問は、作成されたオブジェクトのプロトタイプを変更できますか?

状況によっては可能ですが、それは悪い考えです。

ここで答えを確認してください:すでにインスタンス化されている JavaScript オブジェクトのプロトタイプを設定する方法は?

これは、あなたがやろうとしていると私が推測する例です。Chrome、Safari、Firefox、node.js で動作します。

于 2013-06-14T04:30:49.503 に答える
1
myInstance.__proto__ = new MyConstructor()
myInstance instanceof MyConstructor
true

ただし、これは非標準であり、 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/instanceofによると良い考えではありません

于 2013-06-14T04:29:13.720 に答える
1

一部のブラウザーでは、オブジェクトのプロトタイプが__proto__プロパティを介して公開されますが、それを使用するのは賢明ではありません。これは信頼できず、公式の仕様の一部ではありません。

このため、基本的には、作成後にオブジェクトの型を変更したり、プロトタイプ チェーンを台無しにしたりできないことを受け入れる必要があります。

于 2013-06-14T04:29:24.327 に答える