zoukankan      html  css  js  c++  java
  • 【JS复习笔记】02 对象与函数

    好吧,因为很重要的事情,几天没写笔记了。

    关于对象:

    • ||可以用来填充默认值,如:myApp.name || "无"
    • &&可以用来避免错误,myApp.NameObj有某种情况不存在,那么可以用myApp.NameObj && myApp.NameObj.Name避免脚本错误
    • 所有通过对象字面量创建的对象都连接到Object.prototype,当你创建某对象时也可以选择另一个对象作为它的原型,比如:
      if(typeof Object.beget!=='function'){
          Object.create=function(o){
              var F=function(){};
              F.prototype=o;
              return new F();
          }    
      }
      var another_stooge=Object.Create(stooge);

    • delete运算符可以删掉对象的属性,如:delete obj.name
    • 为了减少全局变量的污染,可以创建一个唯一的全局变量对象,所有的全局变量都写在这个全局变量对象里

    关于函数:

    • 对象字面量产生的字面量的原型都是Object.prototype,函数对象连接到Function.prototype.(该原型对象本身连接到Object.prototype)
    • 除了声明时定义的形式参数,每个函数还接收两个附加的参数:this和arguments。this的值取决于调用的模式。
    • JS中有四种调用模式:
      • 方法调用模式
        • 方法定义:如果一个函数被保存为对象的一个属性,那么就被称为方法。
        • 调用的时候this被绑定为该对象。
      • 函数调用模式
        • 就被当做一个函数来调用,this会被绑定为全局对象。
      • 构造器调用模式
        • 如果在一个函数前面带上new来调用,那么背地里会创建一个连接到该函数的prototype成员的新对象
        • 同时this会绑定到那个新对象上
      • Apply调用模式
        • 因为函数就是对象,所以函数也可以拥有方法,也就是Apply方法
        • funcObj.Apply(obj,array),第一个值obj赋值给this,第二个值为参数数组,funcObj为函数对象
    • 实际参数和形式参数的数目不匹配并不会导致错误
    • arguments数组表示实际传进来的参数的数组,说是数组,实际上这是个数组对象,它没有任何数组的方法。
    • 扩充类型的功能:举个栗子:
    • //下面这个是本书添加新函数的方法
      Function.prototype.AddMethod=function(funcName,func){
          this.prototype[funcName]=func;
          return this;
      };
      //根据数字正负来判断使用Math.ceiling还是Math.floor
      Number.AddMethod('integer',function(){
          return Math[this<0?'ceil':'floor'](this);
      })
      document.writeln((-10/3).integer());
    • 作用域的好处在于它可以访问外部函数的参数和变量(除了this和arguments,当然有变通的手法,比如外部函数this或者arguments赋值给外部函数的一个变量)
    • 闭包写法:
      • 你可以用闭包保护name这个变量,从而形成一个类似于私有变量的东西
      • 所谓闭包,简单来讲,就是函数可以访问它被创建时所处的上下文环境。 
        var getMyName=function(){
            var name='Troy';
            return {
                GetName:function(){
                    return name;
                },
                SetName:function(newName){
                    name=newName;
                }
            }
        }();//注意这里两个括号代表,这个最外围的函数被直接执行了,所以getName其实是里面的那个对象
        
        getMyName.GetName();//结果为Troy
        getMyName.SetName("asd");
        getMyName.GetName();//结果为asd
    • 记忆功能实际上算是对递归的一种优化,就是在递归外用个数组样的容器去保存递归的数据。
    • 什么模块啊,柯里化其实就是对闭包的一种扩展,这里就不记录了
    • 一般我们用函数什么的时候可能会用到this,this指向的是最后一个调用此函数的对象。new一个函数对象,this就会指向新的对象。而new的函数对象里,如果return一个对象,那么产生的对象实际上是这个return的对象,this也就指向这个return的对象
  • 相关阅读:
    THUSC & 中考 & NOI 拉跨记
    Spring Security中的密码安全
    Spring Security 中的 CSRF和CORS
    Jacoco代码覆盖率
    Kafka拦截器
    shell遍历多个数组
    shell中的函数
    SpringSecurity权限控制
    SpringSecurity的@EnableWebSecurity注解
    SpringBoot配置自定义包扫描
  • 原文地址:https://www.cnblogs.com/vvjiang/p/5143852.html
Copyright © 2011-2022 走看看