4-基本包装类型 Object.ptototype详解 静态成员 Function构造函数的使用 函数隐藏参数(arguments, this) caller/callee 私有变量/函数-特权方法 eval/with

基本包装类型

  1. 类型: String字符串对象 | Number数值对象 | Boolean布尔类型对象(区别于简单数据类型的字符串 / 数值 / 布尔值)

  2. 创建对象的方式

      //一般创建方式-object
      var str = new String('demo'); 
      //特殊创建方式-object
      var str = new Object('demo'); 
    
  3. 注意点

    • 比较对象与对象-考虑引用类型数据的存储的值是地址(指向具体数据的地址)

    • 对象和基本数据类型- 对象会转换成基本类型的值

       new String('123') == new String('123');     //false
       new String('123') == '123';   //true
      
  4. 基本数据类型有属性?

    • 字符串 / 数值 / 布尔基本数据类型在使用属性时
    • 内部默认创建一个与之对应的对象
    • 利用该对象使用属性和方法, 得到结果后返回
    • 再销毁该对象
  5. Number对象注意点

    • 变量 / 表达式方式可以直接调用, 数值(可以加个括号封装成表达式的形式)不可以直接调用

Object.ptototype的属性详解

  1. constructor: 指向对象的构造函数
  2. hasOwnProperty: 判断对象是否有指定的实例属性
  3. isPrototypeOf : 判断一个对象是否是指定对象的原型对象(判断的是整一条原型链)
  4. propertyIsEnumerable: 判断一个属性是否是可以枚举的 (可枚举表示可以通过for..in遍历出来)
  5. toString : 返回对应的字符串描述信息, 返回值是string
    • object对象-->[object Obejct]
    • 数组 | 函数-->对应的字符串形式[1,2,3]-->1,2,3
    • Number对象使用的时候可以传递参数表示进制转化
  6. toLocaleString : 一般情况下和toString, 在特殊情况下做本地化的处理
  7. valueOf : 返回对应的值
    • 对象返回对象本身
    • 基本包装类型返回对应的基本数据类型的值

静态成员

  • 定义: 构造函数也是一个对象, 因此它也有自己的属性和方法, 因此它的属性和方法称为静态成员
  • 作用: 添加到构造函数上的属性和方法

Object静态成员

  1. Object.constructor: 指向对应的构造函数

  2. Object.assign : 拷贝属性

  3. Object.arguments: 函数内部的隐藏参数,用来接收实参

  4. Object.call : 借用其他对象的方法

  5. Object.apply : 借用其他对象的方法

  6. Object.caller: 返回调用函数的函数, 如果在全局作用域中调用函数返回null

       function f1() {   console.log(f1.caller);   }
       function f2() {   f1();   }
       f2();    //返回f2() {f1(); }
       //f1();  //返回null
    
  7. Object.create: 创建对象并设置原型对象

  8. Object.getOwnPropertyDescriptor 获取一个对象某个属性的描述信息

    4-基本包装类型 Object.ptototype详解 静态成员 Function构造函数的使用 函数隐藏参数(arguments, this) caller/callee 私有变量/函数-特权方法 eval/with_第1张图片
    Object.getOwnPropertyDescriptor

  9. Object.defineProperty: 定义一个属性并设置描述对象

    • 注意点
      • 修改已经存在的属性, 默认都是true
      • 添加新的属性. 默认是false
    • 属性
      • configurable: true 是否可以配置(1.是否可以删除 2.是否可以改变该配置)
      • enumerable : true 是否可以枚举(是否可以通过for..in遍历)
      • value : 'zs'
      • writable : true 是否可重写(是否可以修改这个属性值)
  10. Object.getOwnPropertyNames: 获取实例属性的属性名,返回数组,数组中存储是所有实例属性的属性名

  11. Object.keys: 获取对象的所有属性名, 不包括原型属性和不可以枚举的实例属性

  12. Object.getPrototypeOf: 获取对象的原型对象

  13. Object.preventExtensions | Object.isExtensible(object) 返回一个值,该值指示是否可向对象添加新属性

    • 禁止扩展,不能添加属性
  14. Object.seal | Object.isSealed

    • 密封对象 :禁止扩展,不能添加属性,不能删除,可以修改
  15. Object.freeze | Object.isFrozen

    • 冻结对象:不能添加属性,不能删除,不能修改

Function构造函数的使用

  • Function构造函数创建方式

    1. 声明函数
    2. 函数表达式
    //命名函数表达式
    var fun1 = function demo() {    } 
    //匿名函数表达式
    var fun1 = function () {    } 
    
    1. new构造函数
  • 注意点

    • 没有参数-->表示函数体没有内容

    • 1个参数-->这个参数作为函数体

    • 多个参数-->最后一个参数作为函数体, 其他是形参

        var fun = new Function('a','b',"console.log(a + b);");
         fun(1,2);
      
  • 参数过长问题

    • 使用+ 拼接

    • 使用反括号(``)替换字符串的引号

    • 使用JS模板

            
      

函数隐藏参数(arguments, this)

  • arguments: 函数内部的隐藏参数, 接收实参, 保存实参
    • 定义: 是一个对象, 类似于数组
      • 判断是不是数组Array.isArray | Object.prototype.toString.call()的结构
  • 实参和形参
    • 函数调用时, 默认会把实参赋值给形参, 并把实参保存在arguments中
    • 实参 < 形参, 依次赋值, 没有赋值的形参是undefined
    • 实参 > 形参, 超出的实参可以通过arguments[i]获取到
  • 函数名.length : 形参的长度
  • arguments.length :实参的长度

caller | callee

  • caller: 返回调用函数的函数, 在全局作用中调用返回null
  • arguments.callee : arguments对象有个属性callee 返回函数自身, 常用于递归调用中(自己调用自己, 有退出条件, 否则死循环)
    • 一般用在闭包匿名函数中, 递归调用获取自己arguments.callee(不常用, 一般arguments[i]用以获取参数, 一般使用命名递归函数自调)

Function小应用(数组去重/求最大值)

  • 去重: 返回一个数组, 数组中存储所有实参, 并且不重复
    • 遍历所有实参-判断数组中是否添加过实参(arr.indexOf(arguments[i]), 若没添加就返回-1)
  • 求最大值思想
    • 假设实参第一个值为最大值
    • 遍历所有实参与第一个实参进行对比
    • 判断实参, 如果比定义的第一个实参值大, 就赋值给第一个参数
    • 返回最大值

Function.prototype原型链-绘图

  • 思考
    • Object.prototype的构造函数是谁
    • Object由哪个构造函数创建出来


      4-基本包装类型 Object.ptototype详解 静态成员 Function构造函数的使用 函数隐藏参数(arguments, this) caller/callee 私有变量/函数-特权方法 eval/with_第2张图片
      Function Object的原型链

Object和Function的关系

  • Object和Function互为对方的实例
  • JS中, 所有对象都是继承Object

私有变量/函数-特权方法

  • 定义: 定义在构造函数内部的变量和函数, 在外界(函数外)访问不到
  • 特权方法: 可以访问私有变量和私有函数的实例方法

eval

  • 定义: 可以把字符串转换对应的JS代码(和ES5支持的JSON.parse()一样处理JSON数据), 并且会立刻执行
  • 区别Function
    • Function把字符串转为代码, 需要调用函数才会执行
  • 不建议使用: JS是词法作用域, eval函数可以动态调整(破坏)其作用域, 性能不好

with

  • 定义: 可以把对象的作用域引申到{}中, 减少代码量-作用跟动态添加属性方法一样

  • 作用: 通过深层次引用属性(对象.属性.属性...)的时候

      with(div.style){
          width = '10px';
          height = '10px';    
      }
      
      //优化-及时函数替代with
      (function(t){
          t.width = '10px';
          t.height =  '10px';
      })(div.style)
    
  • 注意

    • 可以通过无前缀的方式修改属性
    • 不能通过无前缀的方式添加属性
    • 在严格模式下禁止使用, this在其作用域指向的是window

你可能感兴趣的:(4-基本包装类型 Object.ptototype详解 静态成员 Function构造函数的使用 函数隐藏参数(arguments, this) caller/callee 私有变量/函数-特权方法 eval/with)