2017-04-07 6 views
0

は、次のコードを考える:プロトタイプ関数は 'this'を使用するときにどのような点を指摘しますか?

var User = function(name) { 
    this.name = name; 
}; 

User.prototype.sayHello = function() { 
    console.log('Hi my name is ' + this.name + '.'); 
}; 

var user1 = new User('Bob'); 
user1.sayHello(); 

は、私がこれまでに学んだこと、それは字句に座っているオブジェクトで、グローバルオブジェクトで機能ステートメントポイントで使用される、および方法で使用する場合thisキーワード

は何ですか。

また、newキーワードは空のオブジェクトを作成し、コンストラクタを呼び出してその新しいオブジェクトを指し示すことがわかっています。

しかし、私が理解していないのは、user1がsayHelloの機能を所有していないため、 はプロトタイプチェーンになります。 しかし、プロトタイプの関数は、this.nameの参照先をどのように知っていますか?

コンソールの出力は次のようになりますのでHi my name is Bob.

+0

に解決おそらくhttps://developer.mozilla.org/en/docs/Web/JavaScript/Inheritance_and_the_prototype_chainはあなたに –

+0

新しいKEYWOを教育します新しいオブジェクトを作成するだけでなく、プロトタイプをその新しいオブジェクトに '自動的に'バインドするので、user1自身はそのメソッドを定義しませんでしたが、user1のメソッドです。 user1インスタンスのプロトタイプチェーンの最初のステップはUser.prototypeで、プロトタイプメソッドは呼び出されたインスタンスをこの値として使用します。 – Shilly

答えて

0

そのあなたがのsayHelloがそのようにこれをuser1に関連して呼び出された隣のあなたが出力としてボブを取得しますuser1.name上にconsole.logを行う場合、ユーザーオブジェクトから作成しました。名前はボブ

var User = function(name) { 
 
    this.name = name; 
 
}; 
 

 
User.prototype.sayHello = function() { 
 
    console.log('Hi my name is ' + this.name + '.'); 
 
}; 
 

 
var user1 = new User('Bob'); 
 
console.log(user1.name) 
 
user1.sayHello();

関連する問題