3

私は JavaScript を学んでおり、関数はオブジェクトのようなものであり、次のようにプロパティを設定できることを読みました。

var person = function(){
}
person.name="John Smith"; //output ""
person.age=21; //output 21
person.profession="Web Developer"; //output "Web Developer"

name プロパティが空白なのはなぜですか?

ありがとう

4

6 に答える 6

9

は、関数オブジェクトのname非標準で書き込み不可の プロパティであるためです。関数宣言と名前付き関数式には名前が付けられますが、無名関数式には.name""

おそらく単純なオブジェクトが必要でした:

var person = {
    name: "John Smith",
    age: 21,
    profession: "Web Developer"
};
于 2013-09-19T20:36:18.630 に答える
5

name次のように定義すると、関数の名前が得られるため、特別なプロパティです。

function abc(){

}

この場合、 name は string を返します"abc"。この名前は変更できません。あなたの場合、関数には名前がないため、空の文字列です。

http://jsfiddle.net/8xM7G/1/

于 2013-09-19T20:36:01.230 に答える
0

Prototype ( How does JavaScript .prototype work?を参照) を使用するか、単に「人」を次のようにハッシュに変換することをお勧めします。

var person = {};
person.name="John Smith"; //output "John Smith"
person.age=21; //output 21
person.profession="Web Developer"; //output "Web Developer"
于 2013-09-19T20:37:36.190 に答える
0

を使用してプロパティObject.definePropertyを変更できます (フラグvalueに触れなくても):writeable

function fn () {}
console.log(fn.name) // Outputs fn

Object.defineProperty(fn, 'name', { value: 'newName' })

console.log(fn.name) // Outputs newName

于 2021-10-06T12:09:48.023 に答える
-1

プロパティは Function コンストラクターによって設定され、name直接上書きすることはできません。関数が匿名として宣言されている場合、空の文字列に設定されます。

例えば:

var test = function test() {};
alert(test.name); // Displays "test"
test.name = "test2";
alert(test.name); // Still displays "test"
于 2013-09-19T20:37:49.933 に答える