call(this)によるクローズドの再理解
2551 ワード
変数のスコープ
グローバル変数ローカル変数
Javascript言語の特殊な点は、関数内部で直接大域変数を読み取ることができることです.
関数の外部では関数内のローカル変数を読めません.
関数内部で変数を宣言する場合は、必ずvarコマンドを使用します.使わないなら、実際にグローバル変数を宣言しました.
(function(){……}).call(this);
(function(){……})();// , ,
(function(a){c = 1; alert(this.c);})//
(function(a){this.c = 1; alert(this.c);})() //alert(“1”);
(function(){c = 1; alert(this.c);}).call(this);//alert(“1”);
(function(a){c = a; alert(this.c);}).call(this,”5”)//alert(“5”);
試してみたら何の役にも立たないです.次の例を見てください.
var a = {
b : function(){
this.c = 1;// this b
}
}
> a.c //undifined
> a.b(); // b ,this a
> a.c //1
> this.c; //undifined this window
> a.b.call(this) // this window
> this.c //1
> a.c //1
> c //1
(function(){var a = {
b : function(){
this.c = 1;// this b
}
}
this.d = 3; alert(this.c);})()
(function(){var a = {
b : function(){
this.c = 1;// this b
}
}
this.d = 3; alert(this.c);}).call(this)
http://i.h-won.com/post/2013-08-29/40052244462https://github.com/klamtlne/Validator
W 3 School上で説明したように、call()方法は古典的な対象と偽る方法と最も似ている方法である.
function sayColor(sPrefix,sSuffix) {
alert(sPrefix + this.color + sSuffix);
};
var obj = new Object();
obj.color = “blue”;
sayColor.call(obj, “The color is “, “a very nice color indeed.”);
//”The color is blue, a very nice color indeed.
実例2:function ClassA(sColor) {
this.color = sColor;
this.sayColor = function () {
alert(this.color);
};
}
function ClassB(sColor, sName) {
//this.newMethod = ClassA;
//this.newMethod(color);
//delete this.newMethod;
ClassA.call(this, sColor);
this.name = sName;
this.sayName = function () {
alert(this.name);
};
}
var objA = new ClassA(“blue”);
var objB = new ClassB(“red”, “John”);
objA.sayColor();
objB.sayColor();
objB.sayName();