美文网首页
4-基本包装类型 Object.ptototype详解 静态成员

4-基本包装类型 Object.ptototype详解 静态成员

作者: 前端雨 | 来源:发表于2017-11-28 20:18 被阅读0次

    基本包装类型

    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 获取一个对象某个属性的描述信息

      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模板

              <script type = "text/template" id = "demo">
                  console.log("来不及祈祷就开始奔跑");
                  console.log("总觉得外面世界有多美好");
                  console.log("用几滴眼泪才换来骄傲");
                  console.log("我要的光荣哪怕只有一秒");
              </script>
        

    函数隐藏参数(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由哪个构造函数创建出来


        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详解 静态成员

          本文链接:https://www.haomeiwen.com/subject/qioebxtx.html