JavaScript ES5 对象方法

本文介绍了JavaScript ES5的严格模式及其新要求,包括禁止未声明变量赋值、修改函数调用中this的行为、禁用arguments.callee等。接着详细讲解了如何通过严格模式保护对象的属性和结构,如防止扩展、密封和冻结对象,以及使用访问器属性自定义保护规则。此外,还探讨了Object.create方法、函数中this的替换技巧以及数组函数的四种类型和六个内置方法的应用。
摘要由CSDN通过智能技术生成

ES5

  1. 严格模式
    • 概念:比普通js运行机制要求更严格的新运行机制

    • 启用严格模式:在当前作用域的顶部:"use strict"

    • 新要求:
      (1)禁止给为声明过的变量赋值
      (2)静默失败升级为错误:旧js中,执行不成功但不报错,在严格模式下,会报错
      (3)普通函数调用中的this不再指向window,而是指向undefined
      若函数调用时,前边既没有.也没有new,则函数中的this改为指向undefined
      (4)禁用了arguments.callee
      概念:arguments.callee:在调用函数时,函数内部自动获取当前函数本身的关键词
      原因:arguments.callee解决了递归调用中的紧耦合问题,但因为递归算法本身存在大量重复的计算,效率极低,所以arguments.callee被禁用。
      解决:绝大多数的递归都使用循环来代替

使用arguments.callee实现斐波那契数列

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    "use strict";
    
    //斐波那契数列:
    //1 1 2 3 5 8 13 21 34 55
    //1 2 3 4 5 6 7  8  9  10
    //前两个数都是1
    //从第三个数开始: 每个数都是相邻的前两个数的和
    //定义函数,计算出数列中第n个数是几?
    function fib(n){
   
      //如果n<3,直接返回1
      if(n<3){
   
        return 1
      }else{
   //从第三个数开始: 每个数都是相邻的前两个数的和
        //n位置的数=n-1位置的数+n-2位置的数
        //所以,想算出fib(n),必须先算出fib(n-1)和fib(n-2)
        return arguments.callee(n-1)+arguments.callee(n-2)
      }
    }
    console.log(fib(10))//55
  </script>
</body>
</html>
运行结果:
Uncaught TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them
    at fib (7_use_strict4.html:25)
    at 7_use_strict4.html:28

因为禁用arguments.callee所以报错

  1. 保护对象
    专门保护对象的属性和结构的机制

    • 保护属性
      (1)每个属性底层都是一个缩微的对象
      (2)获得属性底层的对象结构:var 变量名 = Object.getOwnPropertyDescriptor(对象名,"属性名")
      举例:获取eric对象
var eric={
   
    name:"ysx",
    age:25,
    hobby:"演戏"
}

var eric = Object.getOwnPropertyDescriptor(eric,"name");
console.log(eric);

在这里插入图片描述
(3)修改一个属性中的开关Object.defineProperty(对象名,"属性名",{开关名:true/false, ... : ... , })
属性底层结构放大:

name
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值