this出現在建構函式中,指向建構函式新建立的物件
this出現在函式中,那個物件呼叫,就指向呼叫者。
this出現在全域性函式中 永遠指向window
this出現在嚴格模式中 永遠不會指向window
this出現在原型函式中 參考2
this出現在箭頭函式中 定義時的環境(父級物件)
function.prototype.call()
var a =
}var b = a.fn;
b.call(a); //若不用call,則b()執行後this指的是window物件
// 解釋一下:把b新增到第乙個引數的環境中,簡單來說,this就會指向那個物件。
call方法除了第乙個引數以外還可以新增多個引數,如下:
var a =
}var b = a.fn;
b.call(a,1,2);
var a =
}var b = a.fn;
var a =
}var b = a.fn;
var a =
}}var b = a.fn;
function.prototype.bind() es5
var a =
}var b = a.fn;
b.bind(a); //**沒有被列印
var a =
}var b = a.fn;
var c = b.bind(a);
console.log(c); //function()
//函式c看看,能不能列印出物件a裡面的user
var a =
}var b = a.fn;
var c = b.bind(a);
c();
// 同樣bind也可以有多個引數,並且引數可以執行的時候再次新增,但是要注意的是,引數是按照形參的順序進行的。
var a =
}var b = a.fn;
var c = b.bind(a,10);
c(1,2);
new關鍵字改變this指向
//建構函式版this
function fn()
var a = new fn();
console.log(a.user); //蘇蘇蘇
//原因:
用變數a建立了乙個fn的例項(相當於複製了乙份fn到物件a裡面),此時僅僅只是建立,並沒有執行,而呼叫這個函式fn的是物件a,那麼this指向的自然是物件a,那麼為什麼物件a中會有user,因為你已經複製了乙份fn函式到物件a中,用了new關鍵字就等同於複製了乙份
淺拷貝var obj =
// var obj2 = obj; //物件賦值的是位址
// obj2.x = 0;
// console.log(obj);
// 淺拷貝
var obj2 = {};
for (var item in obj)
obj2.y[0] = 'aaa';
console.log(obj2);
console.log(obj);
使用json.parse 和 json.stringify 進行深拷貝var obj =
// 使用json.parse 和 json.stringify 進行深拷貝
var obj2 = json.parse(json.stringify(obj));
obj2.y[0] = 'aaa';
console.log(obj2);
console.log(obj);
// 深拷貝 - > 淺拷貝var obj =
};var obj2 = deepcopy(obj);
console.log(obj2);
// 深拷貝 - > 淺拷貝
function gettype(obj)
// function deepcopy(obj) ;
// } else if (oclass === "array") else
// for (var i in obj) else if (gettype(copy) === 'array') else
// }
// return result;
// }
function deepcopy(obj) ;
else if (oclass === 'array') result = ;
else return obj;
for (var i in obj)
return result;
}
利用create方法var obj =
};var obj2 = object.create(obj);
console.log(obj2);
利用jquery裡面的extend但是不能超過兩層的拷貝var obj =
};var obj2 = $.extend({}, obj);
console.log(obj2);
this指向 改變this指向
常見的this指向 常見的this指向 全域性下的this指向window 函式中的this,誰呼叫指向誰 建構函式中的this指向建構函式的物件 物件中的this預設指向當前物件 事件處理函式中this誰觸發指向誰 指向觸發事件的目標元素 定時器函式,this 指向 window 箭頭函式中沒有t...
this指向 改變this指向
function a a 此處相當於window.a 這僅是我個人的理解 在這個 中我們可以看出在 的結尾是由window來呼叫的函式a,那麼這個時候this指向window,this.user,全域性中沒有user,所以先定義了,但是沒有賦值,所以列印出undefined this指向練習二 va...
改變this指向
實現new完整版 function fn name,age fn.prototype.say function var obj1 newfn 高 18 console.log obj1 obj1 自己模擬 var obj 建立對fn.call obj,gao 19 改變建構函式的this 指向 指向...