2017-03-11 14 views
1

実際にはnewというキーワードを使ってクラスとインスタンスを作成していました。JavaScriptを使ってインスタンスを別のクラスに移動する方法

Customersというスーパークラスがあり、newCustomersspecialCustomersという2つのサブクラスがあるとします。

私はボブ==>var bob = new newCustomer();

と呼ばれる新たな顧客を持っていると私は鍛冶屋と呼ばれる特殊な顧客を持っていると仮定== >>

var smith = new specialCustomer(); 

どのように私はに割り当てた方法を書くことができますbob、それは彼をnewCustomerインスタンスからspecialCustomerインスタンスに移動させますか?

例えば、どのようなコード私はこの仕事をするために書くべきのように:

bob.moveToSpecial() //moves bob from being instance of newCust to specialCust 

答えて

1

オブジェクトがクラスのインスタンスではありませんが、オブジェクトが呼び出されるコンストラクタに基づいてプロトタイプを持っています。あなたは何ができるか

(それが副作用を引き起こすかもしれないが)、そのオブジェクトのプロトタイプを変更している。

bob.__proto__ = specialCust.prototype; 

読む警告について、ここでこれをやって:https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Object/proto

より良い方法を新しいオブジェクトを作成し、そこボブからのすべてのプロパティを移動することです:

newBob = new specialCust(); 
for(var prop in bob){ 
    newBob[prop] = bob[prop]; 
} 

は両方のケースでは、ボブは、彼の「継承」する方法とPRを失うことに注意してください後者の場合には、(注釈に記載されているように)非計数的なものだけであるが、古いプロトタイプからのオペレーションである。列挙可能なものはコピーされて新しいオブジェクトに直接バインドされ、継承されたメソッドをオーバーライドする可能性があります。また

読む価値:https://reinteractive.com/posts/235-es6-classes-and-javascript-prototypes

[編集] Object.keysと例コード:

newBob = new specialCust(); 
Object.keys(bob).forEach(function(prop){ 
    newBob[prop] = bob[prop]; 
}); 
+0

* * FOR..IN使用して、あなたも可算継承されたメソッドをコピーします。 ;-) 'Object.keys(bob).forEach(...)'を使うほうが良いでしょう。 – RobG

+0

右。もちろん。私は処方を変更します。また、 'Object.keys'の代わりに' for..of'が可能ですが、私は、bobがコレクションではないと仮定します。 – Psi

+0

@RobGありがとうございますが、私はまだObject.keysを認識していないので、例のコードとして記述してください。 –

関連する問題