今日では、あなたとJSでの矢印の知識共有機能。
1つの矢印機能
1.これを結合しない
矢印機能が表示される前に、それぞれの新しい機能は、この値の独自の定義を持っています
var myObject = {
value:1,
getValue:function(){
console.log(this.value)
},
double:function(){
return function(){
console.log(this.value = this.value * 2);
}
}
}
myObject.double()(); //希望value乘以2
myObject.getValue(); //1
このECMAscript5で解決するために変数に代入されます。
var myObject = {
value:1,
getValue:function(){
console.log(this.value)
},
double:function(){
var that = this;
return function(){
console.log(that.value = that.value * 2);
}
}
}
myObject.double()(); //2
myObject.getValue(); //2
また、使用することもバインド関数、所望の値は、このダブル()関数に送信されることができます。
var myObject = {
value:1,
getValue:function(){
console.log(this.value)
},
double:function(){
return function(){
console.log(this.value = this.value * 2);
}.bind(this)
}
}
myObject.double()(); //2
myObject.getValue(); //2
予想通り、矢印この値のコンテキストで機能キャプチャそれを、独自の、この値は、その次のコードが実行されます。
var myObject = {
value:1,
getValue:function(){
console.log(this.value)
},
double:function(){
//回调里面的 `this` 变量就指向了期望的那个对象了
return ()=>{
console.log(this.value = this.value * 2);
}
}
}
myObject.double()();
myObject.getValue();
2.(呼び出しを使用)及び()コール適用
のみ)、これは、時間の関数呼び出しによって、結合の字句レベルで完了しているので、呼び出し(によって渡されたパラメータのみを)または(適用され、この上に影響を及ぼしません。
var myObject = {
value:1,
add:function(a){
var f = (v) => v + this.value;
return f(a);
},
addThruCall:function(a){
var f = (v) => v + this.value;
var b = {value:2};
return f.call(b,a);
}
}
console.log(myObject.add(1)); //2
console.log(myObject.addThruCall(1)); //2
3.矢印機能は、解決するための...残りのパラメータに置き換えることではなく、バインド引数を行います
var foo = (...args) => {
return args[0]
}
console.log(foo(1)) //1
new演算子を使用して4.
矢印コンストラクタ関数は、一緒に新しいと、使用することはできない、とエラーがスローされます。
var Foo = () => {};
var foo = new Foo(); //Foo is not a constructor
prototypeプロパティは、
プロトタイプのプロパティなしで関数を矢印します。
var foo = () => {};
console.log(foo.prototype) //undefined
6.リテラルは、単にオブジェクトを返すことはできません。
var func = () => { foo: 1 };
// Calling func() returns undefined!
var func = () => { foo: function() {} };
// SyntaxError: function statement requires a name
//如果要返回对象字面量,用括号包裹字面量
var func = () => ({ foo: 1 });
結合のこのメソッドが定義されていない7矢印関数
var obj = {
value:1,
add:() => console.log(this.value),
double:function(){
console.log(this.value * 2)
}
}
obj.add(); //undefined
obj.double(); //2
8.機能矢印をラップすることはできません
var func = ()
=> 1; // SyntaxError: expected expression, got '=>'
矢印のJS機能について、あなたはどのくらいを学びますか?コメントは、コメント領域に歓迎されています!