0

私はこのjavasctiptクラスを持っています

function employee(name, jobtitle, born)
{
    this.name = name;
    this.jobtitle = jobtitle;
    this.born = born;
}

var fred = new employee("Fred Flintstone", "Caveman", 1970);
employee.prototype.salary = null;
fred.salary = 20000;
fred.notprototype = 1239;
console.log(fred);

ご覧のとおり、プロトタイプを使用して給与プロパティを追加しましたが、fred.notprototype = 1239;プロトタイプを使用せずにを使用してプロパティを追加しました。

オブジェクトfredでconsole.logを実行したとき、そこにnotprototypeが表示されます。では、プロトタイプを追加しないのは間違っていますか?もしそうなら、それはどのような違いを生んでいますか?

4

2 に答える 2

3

たとえば、すべてのコードの後に​​これを追加するとします。

var john = new employee("John Carson", "Philantropist", 2015);
console.log(john);

(値の)属性johnがあることが表示されます。あなたはそれを自分で設定しませんでした、それはプロトタイプチェーンから来ています。salarynull

のプロトタイプに追加することにより、Xによって作成されたすべてのオブジェクトを変更しますnew X()

もう一つの例:

function School(name)
{
    this.name = name;
}

School.prototype.getName = function() {
    return this.name;
}

var school_one = new School('one');

console.log(school_one.getName()); // prints "one"

この例ではgetName、プロトタイプにメソッドが追加されています。オブジェクトの作成時に、オブジェクトに追加したすべてのもの(この場合はその1つのメソッドのみ)school_oneから継承します。School.prototype

これは、オブジェクトのインターフェース(アクセスに使用するメソッド)またはコンストラクターとは別のデフォルト値を宣言するために使用できます。

JavaScriptとその独自の機能をより深く理解するには、 DouglasCrockfordのビデオをいくつかチェックすることを強くお勧めします。彼は素晴らしいスピーカーであり、非常に知識が豊富で、彼の話を聞くのが大好きです:)

于 2012-05-20T16:15:14.340 に答える
1

プロトタイプのプロパティは2つのことを行います。

  1. 「プレーン」変数の場合、デフォルト値を提供できます。これは、同じ名前のプロパティをオブジェクトに初めて書き込むときに非表示になります。

  2. メンバー関数の場合、その関数の独自のコピーを含むオブジェクトのすべてのインスタンスのオーバーヘッドを削減します。

于 2012-05-20T16:14:28.007 に答える