2017-05-28 10 views
0

私はコードアカデミーでJavascriptを学んでいます。そして、私はこのコードを見つけました:JavaScriptでオブジェクトを持つ関数

// Our person constructor 
function Person (name, age) { 
    this.name = name; 
    this.age = age; 
} 

// We can make a function which takes persons as arguments 
// This one computes the difference in ages between two people 
var ageDifference = function(person1, person2) { 
    return person1.age - person2.age; 
} 

var alice = new Person("Alice", 30); 
var billy = new Person("Billy", 25); 

// get the difference in age between alice and billy using our function 
var diff = ageDifference(alice,billy); 

そして、それは働き違いを返します。しかし、なぜPerson.aliceとPerson.billyをageDifferenceに入力するとエラーになるのだろうと思っていました。年齢がPerson.billy.ageおよびPerson.alice.ageとして保存されていませんか?

+2

'alice'と' billy'はオブジェクト名であり、オブジェクトの内部構造とは関係がない。したがって、Person.billyとPerson.aliceはPersonクラスの既存のフィールド(JavaScriptのプロトタイプ)を参照します。 –

答えて

2

短答、いいえ。 Personは、AliceとBillyのプロトタイプ(アナログクラスですが、クラスと同じではありません)です。これは、このクラスの新しいオブジェクトが使用できるメソッドとフィールドを定義します。は、Personオブジェクトのすべてを意味するので、のコンテナではありません。

プロトタイプPersonは、それ自身が独自のフィールドとメソッドを持つオブジェクトです。 Person.aliceには、 "alice"という名前のクラスフィールドがあり、すべてPersonオブジェクトが共有します。もちろん、定義した新しいオブジェクトとは関係なく、変数 "alice"に格納されます。

ボトムラインPerson.alice/.billyは、いずれもundefinedであり、undefined.ageはエラーを投げています。

0

型として、newで使用するときは、機能の

function Person (name, age) { 
    this.name = name; 
    this.age = age; 
} 

を考えることができます。それは新しいオブジェクトを含んでおらず、それを構築するだけです。

0

人は、通常のプログラミング言語のようなものではないオブジェクトを作成する方法です。Javascriptはすべてのオブジェクトがオブジェクトであり、すべての関数がオブジェクトなので実際のOOP言語だと言う人もいます...クラスはありません(いくつかのオブジェクトを作成するスキーマ)、いくつかのオブジェクトを作成するためのshcemaはクラスではないオブジェクトです...そして、もしあなたがいくつかのオブジェクトの拡張のようなプロトタイプ..試してみてください。あなたは言う。このオブジェクトはこの場所を指し示し、私がポイリングするところですべてのコードを取る。

関連する問題