2017-08-14 12 views
0

プロパティを取得する関数を作成するにはどうすればよいですか?これを試してみてください6そのプロパティを取得する関数

+2

'myfunc(5,5)'と 'function(a、b)' - なぜパラメータを使わないのですか? –

+0

'alert(myfunc.a + ':' + myfunc.b);'関数の独自のプロパティを参照するには、関数本体の中の関数の名前を使用する必要があります。 @KobyDouek彼らは関数自身のプロパティとは全く異なる動作をしているためです。 – Teemu

+0

'myfunc.call(myfunc)' - うまくいきます。このために関数オブジェクトを使用するのは不思議ですが、どうしてですか? – Bergi

答えて

0

myfunc = function(){ 
 
    alert(this.a + ":" + this.b); 
 
}; 
 

 
myfunc.call({a: 5, b: 6});
通話機能を使用

は、最初のパラメータがある

myfunc = function(){ 
    alert(this.a + ":" + this.b); 
}; 
myfunc.a = 5; 
myfunc.b = 6; 

結果は5である。例えば
関数のthisで、2番目のパラメータはy私たちの機能。 call関数はあなたに関数を呼び出し、myfuncのthisに{a: 5, b: 6}を代入します。

+0

いいえ、 'call'の第2引数は' myfunc'であってはなりません。 – Bergi

+0

ああ、私の悪い。私は今それを変更しています。 –

1

2つの方法があります。最初は、言及した他の人があなたの関数のdelcarationでパラメータに名前を付けるためにあるようです。

function foo(a, b) { 
    alert(a + ':' + b); 
} 

foo('hello', 'world'); // Output "hello:world" 

もう一つの方法は、しかし、変数はすべての関数のパラメータが含まれている利用可能であるということです、argumentsと呼ばれます。

function bar() { 
    alert(arguments[0] + ':' + arguments[1]); 
} 

bar('hello', 'world'); // Output "hello:world" 

それはそれは、配列のように見えながら、arguments変数にはJavaScript Arrayオブジェクトのないインスタンスであることに留意すべきである、argumentsで使用するために利用できる唯一のArrayプロパティが.lengthです。

+0

あなたの答えを編集して要求されたOPとして ':'を含め、投票しました。 –

+0

ここに 'arguments'を使う理由は絶対にありません。 (そして、いいえ、それは配列でも遅くもありません)。あなたの答えからその部分を削除してください。 – Bergi

+0

@Bergi私はそれが遅いとは決して言いませんでした - 私は、パフォーマンスの要因は小さいと言いました。これは、以前は存在しなかった変数を初期化して移植することは、パフォーマンスにマイナスの影響を与えます。マイクロ秒それはまだ存在し、それを人々に知らせることは良いことです。また、OPがダイナミックな入出力の要求を誤って表現している可能性があるので、ここで議論が必要だと感じた。最後に、配列でない場合は何ですか?確かに私には0でインデックスされた配列のように見えます。 – Scoots

0

これはクロージャで行うことができます。

var myFunc = (function(a, b) { 
 

 
    return function() { 
 
    console.log(a + ":" + b); 
 
    } 
 

 
})(5, 6) 
 

 
myFunc();

これは行動のようなクラスを作成するためにprototypeを経由して拡張することができます:

var myFunc = (function() { 
 
    function myFunc(a, b) { 
 
     if (a === void 0) { a = 5; } 
 
     if (b === void 0) { b = 6; } 
 
     this.a = a; 
 
     this.b = b; 
 
    } 
 
    myFunc.prototype.log = function() { 
 
     console.log(this.a + ":" + this.b); 
 
    }; 
 
    return myFunc; 
 
}()); 
 
var a = new myFunc(); 
 
a.log(); 
 
new myFunc().log(); 
 
new myFunc(1, 10).log(); 
 
//ACCESS ATTRIBUTE 
 
console.log("ACCESSING", a.a); 
 
//OVERWRITE ATTRIBUTE 
 
a.a = 11; 
 
//ACCESS ATTRIBUTE 
 
console.log("ACCESSING", a.a); 
 
a.log();

関連する問題