2017-10-04 11 views
0

次のコードの出力は、Bike has 2 wheelsの代わりにundefined has undefined wheelsです。 Instantiated objectは、オブジェクトのprototypeに添付されていない関数を呼び出すことはできませんか? 'Function.prototype.call'を使用してオブジェクトのプロトタイプに添付されていない関数を呼び出す方法

+2

.... '、たとえば:' this.name = "車"。 – Titus

+1

あなたの車のコンストラクタは 'これを行う必要があります。変数をインスタンスにアタッチするには、「name = ...」を使用します。あなたは暗黙のグローバルを宣言しています。 – Li357

+0

まだまだ私は、「車には4輪がある」 – Prem

答えて

4

残念ながら、あなたのコードについてのほとんどすべてが間違っています。

まず、「車両」機能thisのプロパティを設定する必要があり、それが代わりに定数の渡されたパラメータを使用する必要があります。

var vehicle = function(name, wheels) { 
    this.name = name, 
    this.wheels = wheels, 
    this.fuel = "petrol" 
} 

次に、あなたの関数「ドライブ」はまったくのパラメータを取るべきではありません:

function drive() { 
    console.log(this.name + " is driven with " + this.wheels + " wheels"); 
} 

this値として、あなたの車でdrive()を呼び出すために:

var vehicle1 = new vehicle("Bike", 2); 
drive.call(vehicle1); 

.call()の最初のパラメータは、呼び出された関数内のthisの値として使用されます。

0

var vehicle = function(name, wheels){ 
 
\t name = "car", 
 
\t wheels = 4, 
 
\t fuel = "petrol" 
 
} 
 

 
function drive(name, wheels) { 
 
\t console.log(this.name + " has " + this.wheels + " wheels"); 
 
} 
 

 
var vehicle1 = new vehicle('Bike' , 2); 
 
drive.call(vehicle1); //undefined is driven with undefined wheels

あなたはこのよう thisを使用する必要があります。

var vehicle = function(name, wheels){ 
 
\t this.name = "car", 
 
\t this.wheels = 4, 
 
\t this.fuel = "petrol" 
 
} 
 

 
function drive(name, wheels) { 
 
\t console.log(this.name + " is driven with " + this.wheels + " wheels"); 
 
} 
 

 
var vehicle1 = new vehicle('Bike' , 2); 
 
drive.call(vehicle1); //undefined is driven with undefined wheels

3

いくつかの問題:

  1. あなたはコンストラクタ関数としてvehicleを使用しますが、thisに任意のプロパティを割り当てていません。

  2. あなたはあなたがそれを呼び出すときにそれらを供給drivenamewheelsパラメータの定義ではなく、それらを使用していないvehicle

  3. namewheelsパラメータを使用していません。

  4. そうでもない問題、ちょうど大会(私はyour last question上で述べたように):あなたがvehiclenewを使用するつもりなら、それは最初にキャップをする必要があります。Vehicleによって大会を圧倒。

のコメントを参照してください:あなたは `これを使用してこれらの変数を定義する必要があります` vehicle`関数内

var vehicle = function(name, wheels){ 
 
    // Actually use name and wheels and put them on `this` 
 
    this.name = name; 
 
    this.wheels = wheels; 
 
}; // <== Added missing ; 
 

 
function drive(/* No parameters here*/) { 
 
\t console.log(this.name + " is driven with " + this.wheels + " wheels"); 
 
} 
 

 
var vehicle1 = new vehicle('Bike' , 2); 
 
drive.call(vehicle1);

関連する問題