this是執行上下文環境的乙個屬性,而不是某個變數物件的屬性。
在全域性**中,this始終是全域性物件本身,這樣就有可能間接的引用到它了。
在通常的函式呼叫中,this是由啟用上下文**的呼叫者來提供的,即呼叫函式的父上下文(parent context )。this取決於呼叫函式的方式。
如果通過bind
的方式得到的函式,那麼該函式中的this
指向bind
的第乙個引數;
如果通過某個物件使用句點符號觸發函式,那麼函式中的this
指向該物件;
如果直接觸發函式,那麼函式中的this
指向全域性物件(在瀏覽器中指向window
,在node.js中指向global
);
function
cat(name) `);
console.log(`this euqal window: $`);
}}var mi = new cat('mi');
mi.test(); // "this equal _this: true"
// "this euqal window: false"
var test1 = mi.test;
test1();// "this equal _this: false"
// "this euqal window: true"
複製**
var obj2 = {};
function
thisfunc2() `);
console.log(`this2 equal obj2: $`);
};var thisfunc22 = thisfunc2.bind(obj2);
thisfunc2();// "this2 equal window: true"
// "this2 equal obj2: false"
thisfunc22();// "this2 equal window: false"
// "this2 equal obj2: true"
複製**
var globalname = 'globalname';
var obj3 = 'sofia';
function
thisfunc3(a) `);
console.log(`a: $`);
}var thisfun33 = thisfunc3.bind(obj3, 4);
thisfun33.call(globalname, 3);// "this3'name: sofia"
// "a: 4"
thisfun33();// "this3'name: sofia"
// "a: 4"
複製**
var obj4 = `);
}};obj4.thisfunc4(); // "this4 equal obj4: true"
複製**
var obj5 = {};
function
thisfunc5 () `);
}obj5.thisfunc5 = thisfunc5;
obj5.thisfunc5(); // "this5 equal obj5: true"
複製**
var obj6 = {};
obj6.thisfunc6 = function () `);
}obj6.thisfunc6(); // "this6 equal obj6: true"
複製**
var obj7 = {}, obj77 = {};
obj7.thisfunc7 = function () `);
console.log(`this7 equal obj77: $`);
}var thisfunc77 = obj7.thisfunc7.bind(obj77)
thisfunc77();
// "this7 equal obj7: false"
// "this7 equal obj77: true"
複製**
function
thisfunc1() `);
};thisfunc1(); // "this1 equal window: true"
複製**
或者換種寫法:
var obj8 = `);
console.log(`this8 equal window: $`);
}}obj8.thisfunc9 = thisfunc77;
obj8.thisfunc9();
// "this7 equal obj7: false"
// "this7 equal obj77: true"
var thisfunc88 = obj8.thisfunc8;
thisfunc88();
// "this8 equal obj8: false"
// "this8 equal window: true"
複製**
function
logname()
function
dofun1(fn)
function
dofun2(o)
var obj = ;
var name = "hanmeimei";
dofun1(obj.logname);
dofun2(obj);
複製**
結果
hanmeimei
--------------------------------------------
lilei
複製**
function
fun(somthing) , somthing: $`);
};function
bindfun(fn, obj)
}var obj = ;
var bar = bindfun(fun, obj);
console.log(bar);
var b = bar('sofia');
複製**
結果
function ()
--------------------------------------------
name: lilei, somthing: sofia
複製**
function
logname()
var name = "xiaoming";
var lilei = ;
var hanmeimei = ;
(hanmeimei.logname = lilei.logname)();
複製**
結果
window
--------------------------------------------
xiaoming
複製**
JavaScript中prototype的理解
prototype使我們能夠向物件新增屬性或者方法。語法 object.prototype.name value 2.基於原型的繼承 obj2 和obj3都是函式foo的例項,可以看到每個例項不僅有自己自身的屬性,還具有原型鏈上的x 也就是foo.prototype 3.prototype與原型 通...
javascript中處理時間
var mydate new date mydate.getyear 獲取當前年份 2007 mydate.getfullyear 獲取完整的年份 2007 mydate.getmonth 獲取當前月份 0 11,0代表1月 11 mydate.getdate 獲取當前日 1 31 20 mydat...
javascript中處理時間
var mydate new date mydate.getyear 獲取當前年份 2007 mydate.getfullyear 獲取完整的年份 2007 mydate.getmonth 獲取當前月份 0 11,0代表1月 11 mydate.getdate 獲取當前日 1 31 20 mydat...