2017-07-08 1 views
2

関数コンストラクタから 'a'というオブジェクトを作成すると、 'a'はなぜFunctionのインスタンスではないのですか? 「人:

function person(first, last, age, eye) { 
 
    this.firstName = first; 
 
    this.lastName = last; 
 
    this.age = age; 
 
    this.eyeColor = eye; 
 
} 
 
var myFather = new person("John", "Doe", 50, "blue"); 
 
console.log(myFather instanceof person); //true 
 
console.log(myFather instanceof Object); //true 
 
console.log(myFather instanceof Function); //false

こんにちは、このケースでは、我々は関数コンストラクタからオブジェクトを作成しました。

JavaScriptのすべての関数は、関数コンストラクタのインスタンスです。 myFatherがFunctionのインスタンスではないのはなぜですか?

+2

myFather' 'によって参照されるオブジェクトは、*'人() 'コンストラクタによって作成された*プレーンなオブジェクトですので。 'new'で関数を呼び出すと、新しいオブジェクトが作成され、コンストラクタコンテキストで' this'にバインドされます。 – Pointy

+0

プロトタイプチェーンはmyFather - > person.prototype - > object.prototypeです。 instanceofがそれを確認する –

答えて

3

myFatherは、機能が、オブジェクトではありませんように、あなたが別のオブジェクトをインスタンス化するために、再度myFatherを呼び出すことはできませんmyFather instanceof FunctionためmyFather instanceof Objectに当てはまるが、falseを返している原因であるpersonのオブジェクトインスタンスです。実際にはpersonはFunctionのインスタンスです。 new personを呼び出すと、プレーンなオブジェクトが返され、myFatherに格納されます。

function person(first, last, age, eye) { 
 
    this.firstName = first; 
 
    this.lastName = last; 
 
    this.age = age; 
 
    this.eyeColor = eye; 
 
} 
 
var myFather = new person("John", "Doe", 50, "blue"); 
 
console.log(myFather instanceof person); //true 
 
console.log(myFather instanceof Object); //true 
 
console.log(myFather instanceof Function); //false 
 
console.log(person instanceof Function); //true

+0

ああ、私は今それを得た。どうもありがとう – JohannaNoobie

関連する問題