zoukankan      html  css  js  c++  java
  • js面向对象关键点

    函数加new 工作流程:

    (1) 创建一个新对象; => var this = new Object();
    (2) 将构造函数的作用域赋给新对象(因此 this 就指向了这个新对象) ;
    (3) 执行构造函数中的代码(为这个新对象添加属性) ;
    (4) 返回新对象

    this: 谁调用的函数 this就指向谁

    创建的每个函数都有一个 prototype (原型)属性.

    当调用构造函数创建一个新实例后,
    该实例的内部将包含一个指针(内部属性),指向构造函数的原型对象。
    ECMA-262 第 5 版中管这个指针叫 [[Prototype]] 。
    虽然在脚本中没有标准的方式访问 [[Prototype]] ,
    但 Firefox、Safari 和 Chrome 在每个对象上都支持一个属性__proto__

    每当代码读取某个对象的某个属性时,都会执行一次搜索,目标是具有给定名字的属性。搜索首先
    从对象实例本身开始。如果在实例中找到了具有给定名字的属性,则返回该属性的值;如果没有找到,
    则继续搜索指针指向的原型对象,在原型对象中查找具有给定名字的属性。如果在原型对象中找到了这
    个属性,则返回该属性的值。也就是说,在我们调用 person1.sayName() 的时候,会先后执行两次搜
    索。首先,解析器会问: “实例 person1 有 sayName 属性吗?”答: “没有。 ”然后,它继续搜索,再
    问: “ person1 的原型有 sayName 属性吗?”答: “有。 ”于是,它就读取那个保存在原型对象中的函
    数。当我们调用 person2.sayName() 时,将会重现相同的搜索过程,得到相同的结果。而这正是多个
    对象实例共享原型所保存的属性和方法的基本原理。

    call :  

    call:函数的一个方法,
    call方法的第一个参数可以改变函数执行过程中的内部this的指向;
    call方法从第二个参数开始就是原来函数的参数列表;
    如果call方法传入的第一个参数是null,那么就是不改变函数内部的this指向的。

    function show(){
    alert(this);
    }
    
    show(); //这是函数调用的简写 弹出window
    show.call(); //调用函数 也就是说:show() 可视为等同于show.call() 弹出window
    show.call('caonima') //弹出caonima,因为在show里面的this变成了caonima。
    show.call(123) //弹出123,因为在show里面的this变成了123。
    

      

  • 相关阅读:
    Git笔记
    Android笔记
    个人人生警示
    Java 注解
    JAVA面试题
    kotlin学习笔记
    Android Studio之gradle和gradle插件
    gcc在Linux下编译so文件出错 jni.h: no such file or directory
    apktool新官网地址
    Vim 使用记录
  • 原文地址:https://www.cnblogs.com/caonima-666/p/6763109.html
Copyright © 2011-2022 走看看