2016-12-08 1 views
3

を共有し、私はJavaScriptでプロトタイプを使用する方法を学びたい、私はそのプロトタイプを学ぶには多くのオブジェクトJavaScriptのプロトタイプ

var car = function(color, speed) { 
    this.color = color; 
    this.speed = speed; 
} 
car.prototype.doors = 4; 
var honda = new car('black', 'beep'); 
var kea = new car('black', 'meep'); 
document.write(kea.doors+' '+ honda.doors); 
honda.doors = 2; 
document.write('<br/>'); 
document.write(kea.doors+' '+ honda.doors); 
car.prototype.doors = 4; 
document.write('<br/>'); 
document.write(kea.doors+' '+ honda.doors); 

間の機能を共有するたとえば私を助けることができる私はここのビデオを見ました:Here

男は、もし私がプロトタイプの値を更新すると、変数はすべてのオブジェクトで変更されますが、私の例では値を変更しても変更されていないと言いました。 私が間違っている場合は私を修正してください。

+0

削除を考えてみましょう私は、これはプロトタイプ

の理解に役立ちます願っていますネイティブのプロパティ値を参照すると呼ばれています"honda.doors = 2"という行を表示してから –

答えて

1

JavaScriptオブジェクトは参照型ですが、Numbersなどのプリミティブは参照型ではありません。あなたはコピーを使用します。 honda.doorsの値を変更すると、他の場所では変更されません。これを解決するには、car.prototype.doors = {doors: 4};

+0

を参照してください。 "honda.doorsの値を変更すると、他の場所では変更されません。私はそれを知っているが、ビデオでは、男はcar.prototype.doorsがそれぞれのオブジェクトの中のすべてのドアの変数を更新すると言っていたが、 –

+0

@Seph Eddine Slimene間違った情報、たぶん彼はビデオのコメントセクションで彼を訂正する必要があります – Viney

+0

ビデオの最後の部分をチェックしてください、彼はexplicityが変更された値とそれがコンストラクタのプロトタイプから値を継承した私はちょうど –

4

のようにcar.prototype.doorsをオブジェクトとして配置できます。これらは、このプロパティが明示的に変更されていないオブジェクトに対してのみ変更されます。私は5つのドアを設定する最後のステップであなたのコードを変更:そこに

car.prototype.doors = 5; 

https://jsfiddle.net/g1hrujL0/ あなたは私たちがきたがために、そのプロトタイプから値を継承ケアオブジェクトの扉の変化の数を見ることができますホンダオブジェクトのこのプロパティを明示的に変更した場合、その値は変更されません。

+0

を確認したいが、ビデオでは、男は、car.prototype.doorsはそれぞれのオブジェクトの中のすべてのドアの変数を更新すると言ったが、 –

+0

基本的にオブジェクトの値にアクセスしようとすると、値がオブジェクトに直接プロパティとして設定されているかどうかが最初にチェックされます。設定されていない場合は、オブジェクトのプロトタイプをチェックします。したがって、プロトタイプの値を更新すると、このプロパティにカスタム値が設定されていないオブジェクトにのみ影響します。 – Ben

+0

ちょうどビデオの最後の分を確認してください、彼はexplicityが明示的に変更された値とそれのコンストラクターのプロトタイプからの値を継承する他のものが両方を変更することを、私はただ確認したいと言った。 –

1

あなたはこのようなオブジェクトを作成しました。 chrome dev toolsを開くと確認できます。あなたがhonda.doorsを探したとき、それが答えを@Benする4.

car:{ 
    color: "black", 
    doors: 2, 
    speed:"beep", 
    __proto__: { 
     constructor: function(color, speed), 
     doors:4, 
     __proto__: {} 
    } 
} 
1

さらに追加を見つける前に、それが2を見つけるこれは(彼らは、このプロパティが明示的に変更されていないオブジェクトに対してのみ変更されます) deleteと同じです。また、現在のオブジェクトプロパティ(delete honda.doors;)を削除して参照すると、プロトタイププロパティValueが取得されます。プロトタイプは、現在のオブジェクトが他のそのプロパティを持っていないとき、それは常に、コードのこの部分

var car = function(color, speed) { 
 
    this.color = color; 
 
    this.speed = speed; 
 
} 
 
car.prototype.doors = 4; 
 
var honda = new car('black', 'beep'); 
 
var kea = new car('black', 'meep'); 
 
console.log(kea.doors+' '+ honda.doors); 
 
honda.doors = 2; 
 
console.log('<br/>'); 
 
console.log(kea.doors+' '+ honda.doors); 
 
car.prototype.doors = 4; 
 
delete honda.doors; 
 
console.log('<br/>'); 
 
console.log(kea.doors+' '+ honda.doors);

+0

本当に助けてくれてありがとう: –

関連する問題