關於This指向,改變指向, 深淺拷貝的幾種方法

2021-09-23 06:10:58 字數 2697 閱讀 4130

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 指向 指向...