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

    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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,311评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,339评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,671评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,252评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,253评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,031评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,340评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,973评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,466评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,937评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,039评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,701评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,254评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,259评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,497评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,786评论 2 345

推荐阅读更多精彩内容

  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,212评论 0 4
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,679评论 0 9
  • ##**理解对象**## --- ###**属性类型** > JavaScript中有两种属性类型 分别是 数据属...
    nullunde阅读 296评论 0 0
  • var a = 1; console.log(typeof a);// 'number' var b = '1';...
    zdnexus阅读 320评论 0 0
  • 很喜欢小朋友天真可爱的笑脸,趁着最后的时间画了一张。用的是彩铅,下面是过程图。 先是画底稿,因为不确定能不能画对,...
    烤个鸡腿给你吃阅读 666评论 19 21