学习时间 完成时间 ✅ 重难点 疑问/遗漏
复习时间

对象的遍历

  1. var sched={
  2. wakeup: function(){
  3. console.log('Running')
  4. return this
  5. },
  6. morning: function(){
  7. console.log('shopping')
  8. return this
  9. }
  10. }
  11. sched.wakeup().morning()
  12. 对象的枚举 有遍历也就有枚举
  13. var car={
  14. brand: 'Benz',
  15. color:'red',
  16. displacement:'3.0'
  17. }
  18. for(var key in car){ //for in同样可以遍历数组,for in会遍历出来原型上自定义的属性
  19. console.log(car.key) //此处会打印undefined,因为javaScript内部的处理是
  20. //car.key->car['key']->undefined
  21. console.log(car[key])
  22. }

hasOwnProperty

  1. function Car(){
  2. this.brand='Benz';
  3. this.color='red';
  4. }
  5. Car.prototype={
  6. land: 5,
  7. width: 2.5
  8. }
  9. Object.prototype.name='Object'
  10. var car=new Car();
  11. 'land' in car //true
  12. for(var key in car){
  13. console.log(key) //brand color land width name 也会遍历出自定义的原型属性
  14. if(car.hasOwnProperty(key)){ //排除自定义原型上的属性
  15. console.log(car[key]) //Benz red
  16. }
  17. }

intanceof

  1. function Car(){}
  2. var car=new Car();
  3. console.log(car instanceof Car) //true
  4. console.log(car instanceof Object) //true
  5. console.log(car instanceof Array) //true
  6. A对象的原型里到底有没有B的原型
  7. var arr=[];
  8. var str=Object.prototype.toString; //判断数据类型的方式
  9. if(str.call(a)==='[object Array]'){
  10. console.log('是数组')
  11. }else{
  12. console.log('不是数组')
  13. }

this

  1. 函数内部的this
  2. function test(b){
  3. this.d='3';//相当于window.d=3; this和window一样
  4. var a=1;
  5. function c(){}
  6. }
  7. test(123)
  8. console.log(d) //'3'
  9. 构造函数
  10. function Test(){
  11. this.name='123' //当构造函数实例化的时候,this就指向了test
  12. }
  13. var test=new Test();
  14. callapply第一个参数是啥this就指向啥
  15. 总结:
  16. 全局this指向window
  17. 预编译函数this->window
  18. apply/call改变this指向
  19. 构造函数的this指向实例化对象

callee/caller

  1. function test(a,b,c){
  2. console.log(arguments.callee.length)相当于test.length,arguments.callee表示函数本身
  3. }
  4. function sum(n){
  5. if(n<=1){
  6. return 1;
  7. }
  8. return n+sum(n-1)
  9. }
  10. var sum=(function(n){
  11. if(n<=1){
  12. return 1;
  13. }
  14. return n+sum(n-1);
  15. })(100)
  16. console.log(sum)
  17. caller可以检测出谁调用它了

试题

  1. function foo(){
  2. bar.apply(null,arguments)
  3. }
  4. function bar(){
  5. console.log(arguments) //Arguments(2) [1, 3, callee: ƒ, Symbol(Symbol.iterator): ƒ]
  6. }
  7. foo(1,3)
  8. typeof可以返回的值:objectbooleannumberstringundefinedfunction
  9. var f=(
  10. function f(){
  11. return '1'
  12. },
  13. function g(){
  14. return 2
  15. }//逗号表达式,返回的是g函数
  16. )();
  17. console.log(typeof(f)); //number
  18. console.log({}=={})//false
  19. var a='1';
  20. function test(){
  21. var a='2';
  22. this.a='3';
  23. console.log(a)
  24. }
  25. test(); //2
  26. new test(); //2
  27. console.log(a)//3