zoukankan      html  css  js  c++  java
  • 【JavaScript高级程序设计】读书笔记-第4章function

    函数内部属性 :arguments、callee、caller、prototype 以及方法call和apply等。

    arguments:arguments对象是所有(非箭头)函数中都可用的局部变量。你可以使用arguments对象在函数中引用函数的参数。此对象包含传递给函数的每个参数,第一个参数在索引0处。例如,如果一个函数传递了三个参数,你可以以如下方式引用他们:

    arguments[0]
    arguments[1]
    arguments[2]
    

    arguments.callee:
    指向当前执行的函数。

    在这里插入图片描述

    arguments.caller :
    指向调用当前函数的函数。

    在这里插入图片描述
    在这里插入图片描述

    arguments.length:
    指向传递给当前函数的参数数量。

    arguments[@@iterator]:
    返回一个新的Array迭代器对象,该对象包含参数中每个索引的值。

    每个函数都包含两个非继承的方法call()和apply()

    apply() 改变函数内部this的指向
    methodName.apply(obj,args) 第一个参数是函数作用域(相当于调用者),第二个是参数数组。 这里相当于java的反射调用 method.invoke(obj,args)

    改变了this的指向

    在这里插入图片描述

    call()

    call() 与apply()类似,只是传参方式不同,call需要传多个参数,apply只需要传一个参数数组
    在这里插入图片描述

    prototype

    1. 函数有一个prototype (原型对象), 它是用来规范【所有】 通过 【new+ 函数】创建【实例的 共享属性/方法】。
      prototype 能让【实例】有"共享"的属性和方法。 就像是对构造函数的补充。我将它看作在function中追加了 this.xx = something.
      ps:对应原型对象的属性是基本属性,共享无所谓。但是,对于引用类型属性,修改其会导致所有实例的该属性都变更。见10.
      在这里插入图片描述

    在这里插入图片描述

    1. 先声明实例 再用prototype定义 实例的共享属性和方法 , 之前的实例一样能使用
      在这里插入图片描述

    2. 与prototype不同的是, Object.defineProperty只能修改一个对象的属性和方法。 而prototype是所有对象的属性和方法(从p和p2看出)

    在这里插入图片描述

    1. Person.prototype.isPrototype§ 可以用于判断p的__proto__属性是否指向prototype

    在这里插入图片描述

    1. 也可以通过Object.getPrototypeOf§得到p的__proto__属性
      在这里插入图片描述

    2. 实例中的同名方法/属性 会屏蔽 prototype中的方法和属性。当执行p.sayHi()时,会先从p中找是否有sayHi方法,没有则从p.__proto__中找Person.prototype对应的sayHi方法。可以通过delete 删除原型中的方法后 恢复对原型方法的访问。
      在这里插入图片描述

    3. 通过p.hasOwnProperty(“name”)可以判断name属性来自原型还是实例。
      在这里插入图片描述

    4. 通过 hasOwnProperty和in 判断是否是原型的属性
      在这里插入图片描述

    5. 更简单的原型语法
      在这里插入图片描述

    6. 原型对象的问题
      当原型对象是引用类型的时候,改变会导致所有实例的该属性改变。
      在这里插入图片描述

  • 相关阅读:
    咨询
    xcode技巧
    礼仪
    asi 网络框架
    iOS 开发问题 书籍 价值 改名 创业大赛app
    PS,UI,美工
    运营推广
    多线程 并发 文章
    手机技巧 文章
    javaScript 类文章
  • 原文地址:https://www.cnblogs.com/thewindkee/p/12873142.html
Copyright © 2011-2022 走看看