原型链,函数的相关属性

原型链,函数的相关属性

  1. 原型链的概念

    • 所谓原型链 就是指 从一个对象到Object.prototype之间存在一条体现继承层次关系的链式结构,这个结构被称为对象的原型链。

    • 本质:链上的每一个对象都是通过__proto__属性连接起来的。

  2. 绘制原型链

    • 先简写对象的原型链

    • 将上述原型链上的所有对象绘制在图形上。并且将和原型链相关的属性添加到对象上。

    • 给对象的每一个属性确定指向

    • 如果在图形上的每一个对象的属性都有正确指向,说明绘制完成。

  3. Object.prototype 的方法简介

    1. hasOwnProperty

      • has 有
      • own 自己的
      • property 属性
      • 语法:obj.hasOwnProperty(“propName”)
      • 用来判断指定属性是否为对象自身的,而不是继承过来的;如果是自身的就返回true,
        否则返回false
    2. isPrototypeOf

      • is 是
      • Prototype 原型
      • of 的
      • obj1.isPrototypeOf(obj2)
      • 用来判断obj1 对象 是否为 obj2对象 的原型;如果是,就返回true,否则返回false。
    3. propertyIsEnumerable

      • property 属性
      • is 是
      • Enumerable 可枚举的 可以使用for in遍历出来的属性
      • obj.propertyIsEnumerable(‘propName’)
      • hasOwnProperty升级版:
      • 满足这2个条件返回true,否则返回false
        • 指定的属性必须是对象本身的
        • 该属性必须可枚举
  4. 装箱 与 拆箱

    • 将基本数据类型 装换为 复合数据类型,这个过程被称为 装箱
    • 将复合数据类型 装换为 基本数据类型,这个过程被称为 拆箱
  5. 强调几点

    • 默认原型对象才具有constructor属性

    • 只有函数具有prototype属性(除了Function.prototype)

    • 任意的对象都具有__proto__属性

  6. instanceof介绍

    • obj instanceof constructor

    • 规则:如果constructor 的原型 出现在 obj 的原型链上的话,表达式返回值为true,否则false。

  7. Function

    • 声明式
    function foo() {

    }
  • 表达式
    fnName();
    var fnName = function() {};
  • 构造函数方式
    var fn = new Function("arg1", "arg2", "arg3", ..."argN", "body");
    - "arg1", "arg2", "arg3", ..."argN" 为生成函数的形参列表,且为可选的参数列表
    - "body" 为生成函数的函数体部分
    - 如果不给构造函数传参数的话,就会创建一个没有形参列表也没有函数体实现的函数。
    - 如果只传入一个参数,那么这个参数值会交给"body"形参。
  1. eval 与 Function

    • 共同点

      • 都可以将一个字符串当做一段js代码来执行。
    • eval 具有作用域安全问题,有可能污染变量,而Function并不会。

    • 可以肆意在全局上执行一段字符串代码,会造成网站不安全。
  2. 两个概念

    • 函数对象:在绘制函数的原型链的时候,将函数称为 函数对象;
    • 除了函数,都称为 普通对象。
  3. 函数相关属性

    • caller: 返回调用当前函数的函数

      • 所谓函数调用函数 就是指在函数体内部调用其他函数
    • length: 记录的是形参的个数

    • name: 记录函数的名字

你可能感兴趣的:(javaScript)