成大事不在于力量的大小,而在于能坚持多久。

this的讲解和其他习题

习题

1  var f = (
2    function f(){return '1'},
3    function g(){return 2}
4  )() 
5  typeof f //number (括号操作符会返回逗号后面的东西)
 var x = 1;
 if(function f(){}){
   x+=typeof f
 }
 //x  1undefined   函数变成表达式就会立即执行,执行之后再也找不到了

判断一个数字是不是数字

1 function isNaN(num){
2   var ret = Number(num);
3   ret +='';
4   if(ret =='NaN'){
5    return true;
6  }else{
7    return false;
8  }
9 }

对象是引用值,引用值比对的是地址,而这个是属于两个房间,地址不一样

 

 

 

 this

1、函数预编译过程this->window

1 function test(){
2   console.log(this);//this指向window
3 }
4 test();

2、全局作用域里this ->window

3、call/apply 可以改变函数运行时this指向

4、obj.func(); func()里面的this指向obj(谁调用函数,这个this就指向谁)

this习题

 1 var name = '222';
 2 var a = {
 3   name:'111',
 4   say:function(){
 5     console.log(this.name);
 6   }
 7 }
 8 
 9 var fun = a.say;
10 fun();//222
11 a.say();//111
12 var b = {
13   name:'333',
14   say:function(fun){
15     fun(); 
16   }
17 }
18 b.say(a.say);//222
19 b.say = a.say;
20 b.say();//333

 

 1 var length = 10;
 2 function fn(){
 3      console.log(this.length)
 4 }
 5 var obj = {
 6       length:5,
 7       method:function(fn){
 8             fn();//10
 9             arguments[0]();//2
10       }
11 }
12 obj.method(fn,1)

 

arguments.callee(相当于函数自身引用)

1 var num = (function (n){
2     if(n==1){
3       return 1;
4     }
5     return n*arguments.callee(n-1);
6 }(100))

深克隆(改变现在的属性,不会更改原来的属性)

遍历对象for(var prop in obj)

判断是不是原始值 typeof() object

判断是数组还是对象

建立相应的数组或对象

 1  function deepCopy(origin, target) {
 2             var target = target || {}
 3             for (var i in origin) {//遍历数组
 4                 if (typeof origin[i] === 'object') {//判断是不是原始值
 5                 //要考虑深复制问题了
 6                 if (origin[i].constructor === Array) {//判断是数组还是对象
 7                     //这是数组
 8                     target[i] = []
 9                 } else {
10                     //这是对象
11                     target[i] = {}
12                 }
13                 deepCopy(origin[i], target[i])//建立相应的数组或对象
14                 } else {
15                 target[i] = origin[i]
16                 }
17             }
18             return target
19         }
20         var obj = {
21             name:'fan',
22             abc:{
23                 grade:190,
24                 arr:[{a:123}]
25             }
26         }
27         var obj1 ={}
28         deepCopy(obj,obj1)
29         console.log(obj1)
30         obj1.name = 'you'

 

 

 1 function deepCopy(origin,target){
 2             var target = target || {}
 3                 toStr = Object.prototype.toString,
 4                 arrStr = "[object Array]";
 5             for(var prop in origin){
 6                 if(origin.hasOwnProperty(prop)){
 7                     if(origin[prop] !=='null' && typeof(origin[prop]) == 'object'){
 8                         if(toStr.call(origin[prop]) === arrStr){
 9                             target[prop] = []
10                         }else{
11                             target[prop] = {}
12                         }
13                         deepCopy(origin[prop], target[prop])
14                     }else{
15                         target[prop] = origin[prop]
16                     }
17                 }
18             }
19             return target;
20         }
21         var obj = {
22             name:'fan',
23             abc:{
24                 grade:190,
25                 arr:[{a:123}]
26             }
27         }
28         var obj1 ={}
29         deepCopy(obj,obj1)
30         // console.log(obj1)
31         obj1.name = 'you'

 

 

 

posted @ 2020-03-20 19:06  雪绒花1124  阅读(147)  评论(0)    收藏  举报