1

オブジェクトはプロパティとメソッドのコレクションであると読みました。それでは、関数がオブジェクトである場合、関数オブジェクトは JavaScript のオブジェクトの定義にどのように適合するのでしょうか? プロパティと関数を使用して関数の例を作成しようとしていますが、成功しています。

 function myperson(){
    this.name= "Bruno";
    personAbility = function(){document.write(1+1);};
}

document.write(myperson.name);

私は何を間違っていますか?手伝ってくれませんか。どうもありがとう!

4

3 に答える 3

2

mypersonコードでのインスタンスを作成していません。

あなたが言ったように、関数はオブジェクトです。はい、関数はオブジェクトであり、プロパティもあります。myperson.nameあなたが実際に関数の名前フィールドにアクセスしていると言っているとき。

これは関数であり、 function という名前であるため、関数の名前は、関数に対して宣言したmypersonであり、これは Javascript エンジンによって処理されます。

また、関数をコンストラクターとして呼び出したり、オブジェクトにバインドしたりしていないため、関数内でオブジェクトをthis指します。windowしたがって、関数を呼び出すだけではmyperson.name属性は設定されません。new演算子 likenew mypersonを使用してオブジェクトを作成する必要があります。そのオブジェクトには、アクセスするプロパティ「name」があります。


function myperson() {
    this.name= "Bruno";
    this.personAbility = function(){document.write(1+1);};
}

var per = new myperson();
document.write(per.otherName);
//call the personAbility method like below
per.personAbility();

この使い方の詳細。

于 2015-10-07T20:23:18.567 に答える
1

関数をコンストラクター関数として扱うと、thisキーワードが使用可能になります。つまり、newキーワードを使用して新しいインスタンスを作成する必要があります。

function myperson(){
    this.name= "Bruno";
    personAbility = function(){document.write(1+1);};
}

var person = new myperson();
document.write(person.name);
于 2015-10-07T20:12:40.960 に答える