/*
this的使用:在预编译的过程this指向是window
在全局作用域里this指向是window
call/apply 改变this的指向
obj.function();function()里面的this指向的是obj
*/
var obj = {
a: function () {
console.log(this.name)
},
name: '123'
}
obj.a(); //谁调用这个方法this指向谁,没用调用就是预编译
var foo = 123;
function print() {
this.foo = 234;
console.log(foo);
}
/*print();*/ //234
new print(); //123
/*
arguments.callee:指向函数的引用,也就是它本身
*/
var num = (function (n) {
if (n == 1) {
return 1;
} else {
return n * arguments.callee(n - 1);
}
}(10))
/*深层拷贝*/
/*
遍历对象 for (var prop in obj)
1:判断是不是原始值 typeof()
2:判断是数组还是对象
3:判断相应的数组和对象
*/
var obj = {
name: 'tom',
age: 23,
son: {},
wife: ['sss', 'ddd']
}
function deepClone(origin, target) {
//容错
var target = target || {},
toStr = Object.prototype.toString(),
arrStr = "[Object Array]";
for (var prop in origin){
if (origin.hasOwnProperty(prop)){
if (origin[prop] !== 'null' && typeof (origin[prop]) == 'object'){
if ( toStr.call(origin[prop]) == arrStr){
target[prop]= [];
}else {
target[prop] ={};
}
deepClone(origin[prop],target[prop]);
}else {
target[prop] == origin[prop];
}
}
}
}
js 中this 使用和深层拷贝
最新推荐文章于 2024-07-19 20:27:38 发布