1. 数据类型:
    基本(值)数据类型:
    string
    number
    undefined
    null
    boolean
    对象(引用)类型

    查找对象的属性时,会查找原型链
    设置属性时,一般在构造函数里面设置,不会查找原型链,如果不存在,就添加进这个属性,并设置值
    方法一般在原型中定义


    没有显示指定构造函数的实例对象,构造函数默认都是Object函数。
    如果你希望你的当前实例对象继承别的实例对象,你就要用你的实例对象的原型去继承别的实例对象
    __proto__ 就是保存原型对象的地址值
  2.  
  3. 只要是对象,不管是实例对象还是函数对象,他都有构造函数。
    构造函数的prototype属性指向一个空对象,称为显示原型,实例对象或函数对象的__proto__属性指向一个空对象,称为隐示原型,这两个是相等的,指向同一个空对象
    构造函数的prototype 会被赋值给 实例对象或者函数对象的__proto__。通常同一个函数的这两个属性是不相等的,只有在Function的时候才会始终相等

    Object
    声明方式: 使用构造函数 function Object(){}; Object var samp = new Object();
    表达式声明 var samp = {
    对象实体
    };
    由函数构造器生成 function test(){}; var samp = new test();
    可以使用samp.construcor去替换设置构造函数
    1.包含数据和操作的封装体,隐藏细节,
    2.调用属性和方法:【如果调用没有的属性和方法,就会添加这个属性和方法可以添加属性到对象中】
    2.1通过点号,
    2.2 使用['属性名']
    2.2.1属性命中包含- 空格的,
    调函数:p['属性名']() 编码简单,有时不能用
    调属性:p['属性名'] 编码复杂,但通用
    2.2.2 属性名不确定
    这个parameterName是不确定的,也不知道叫啥,只是知道,就会这么执行。这个parameterName必须是对象中的属性名。
    var parameterName = ''
    p[parameterName]
  4.  
  5. Function
    注意: 对构造函数prototype做变化,实例对象都是找__proto__确定属性和别的
    关键看创建构造函数做了什么(this.prototpe = {}),创建实例对象又做了什么(this.__proto__ = this.prototype),如果之后构造函数的显示原型发生变化,之间创建的实例对象的隐示原型链不会变化(因为地址值没有被再次赋予)。
    只要是能创建实例对象的构造函数,他的原型就在隐示连条上,,而Object的显示原型是一切对象的终点,在所有实例对象的隐示原型链上

    只有构造函数才有prototype,对象的是undefined,其他则是异常,不存在。
    Function = new Function() 自己创建自己
    var test = new Function(); Function函数对象创建了test函数对象,那Function是谁创建的那。 只能是Function = new Function(); 那么就是Function自己创建了自己
    function test(){}
  6.  
  7. 所有函数的__proto__属性都相同,指向Function的显示原型
    Function__proto__prototype都是Function的显示原型,就是自己创建了自己
  8.  
  9. 所有对象的原型都是一个 Object函数对象的实例 ,除了Object.prototype不是 console.log(Objectprototype instanceof Object); // false
    Function.prototype = f(){native code}
    Function.__prototype = f(){native code}
    console.log(Function.prototype === Function.__proto__);// true
  10.  
  11. console.log(Function.prototype.__proto__ === Object.prototype);// ture Function函数对象的显示原型 的隐示原型 指向 Object函数对象的的显示原型 所以Object函数对象的显示原型为原型链的终点
    var anyFunciton = new Function(); // 任何函数对象本质是这样的。 但是Function也是一个函数对象啊,总要有一个终点,那么就自己创建自己吧

    1.实现n语句的封装体,只有函数可以执行,其他不能执行。
    2.提高代码复用度
    3.便于阅读交流
    4.声明方式: 函数声明 function fn(){}, 表达式声明 var fn2 = function (){}
    5.调用: 直接调用, 通过对象调用, new函数调用,funciton.apply/call(obj),让function临时成为obj的对象
    6. 调用函数时,不会检查函数的实参的数量的类型
    7. 返回值
    可以在函数内部写一个return,如果return后不跟值,返回undefined
    不屑return也会返回undefined
    Array 数组内可以存储多个类型的数据
    声明方式 new Array() 未定义长度, new Array(长度) 定义长度
  12.  

  13. 判断类型
    typeof 不可以辨别 null Object Array 这三种类型的都不被识别为Object
    instaceof 辨别具体对象类型
    怎么判断的 A instanceof B
    B 是构造函数 A是实例对象
    如果B的显示原型在 A的隐示原形链上, 则是
    Object是一个函数对象,即是构造函数,也是一个实例对象 Object(看作Function实例对象) instanceof Function 是对的, Function instanceof Object没错(Function的隐示原型链上存在Object的显示原型)
    Function技术一个构造函数,也是一个实例对象
    === 可以辨别undefined null
  14.  
  15. undefined null区别
    undefined 未定义或者定义了什么都没赋值
    null 定义并且赋值null
    什么时候给变量赋值null
    初始赋值, 表明将要赋值为对象
    结束前,让对象成为垃圾对象
  16.  
  17. 区分数据类型和变量类型
    变量类型:基本类型,引用类型(保存对象的地址)
    数据类型:基本类型,对象类型
  18.  

  19. 回掉函数:
    1. 你定义的
    2. 你没有调用
    3. 但最后执行了
    常见的回掉函数
    dom事件回掉函数
    定时器回掉函数
    ajax请求毁掉函数
    生命周期回掉函数
  20.  

  21. 匿名函数自调用 function(){})()
    作用:
    1.隐藏实现
    2.不会污染外部命名空间
    3.用匿名函数自调用编写js模块
    $ 是一个函数,返回的是一个对象
  22.  
  23. 五,确定this
    1.this是那个
    1.1 函数必须是由对象来调用的。如果没有指定,默认是window
    1.2 如果指定了,就是所指定的对象
    1.3 所有函数内部都有一个this
    2.如何确定:
    2.1 test() window
    2.2 new test() 所创建的对象
    2.3 p.test() p
    2.4 p.test.call(obj) obj
  24.  
  25. 六,原型prototype 何为原型,以我理解,原型就是被实例对象继承的那个对象(由构造函数创建的空对象)
    注意:所有实例对象的显示原型都是undefined,只有函数对象有显示对象,隐示原型要么是构造函数和实例对象相同的空对象,要么就是Object对象
    1. 原型是一个空对象【没有我们写的属性】,这个空对象的构造函数是函数对象
    2.利用函数对象创建的势力对象的构造函数也是这个函数对象
    3. 给我的感觉有点像分身,对的。原型是本体,而实力对象是分身,分身可以继承本体的特点,分身(实例对象)的后期开发的特性本体(原型)却不能拥有,而连接他们关系的就是这个函数对象(血脉)
    继承的级别和关系: 实例对象 函数对象 原型
    对函数对象来说,原型是显示的,用一个prototype属性存储原型的地址值。
    对实例对象来说,原型是隐示原型,用一个__proto__属性存储地址值 ,然后原型又继承ObjectObject的没有隐示对象的,因为他是根对象,所以__proto__属性值是null
    从原型及以上所有对象继承的函数,都能在实例对象中直接调用
    4. Object.prototype是所有对象的终极原型,任何对象都会继承他,但是他不是对象
  26.  
  27. 5. 原型/构造函数(函数对象)/实例对象(实体对象),原型链之间的关系。
    5.1 可以在函数对象内部通过this 给实例对象添加属性和方法
    function test() {
    /*
    * 给实例对象添加方法和属性
    * */
    this.value = 'this is value';
    this.setCall = function () {
    console.log('this call')
    }
    }
    5.2 直接在函数对象实体外 函数对象名.属性名或方法名 = function 数据, 为函数对象添加属性和方法
    /*
    * 给函数对象添加属性和方法,如下所示,也可以跟对象一样,在原型中添加属性和方法。
    * */
    test.setPrint = function () {
    console.log('新的玩意')
    }
    test.call = '随意写的s';
    5.3 除此之外,其他直接在函数体内部写的语句都是内部执行的,不可调用
    5.4 原型的特性,只有实例对象才能继承。函数对象不能继承。Object的原型对象是终点
    比如,在原型中添加一个函数,函数对象是不能调用的,只有实例对象才能调用.所有的特性继承下来,都是通过__proto__属性延伸下来。这天链又叫 隐示原型链
    使用函数对象可以创建实例对象
  28.  
  29. 5.5 原型和实体对象的构造函数是相同的
    5.6 函数和属性都是可以继承的,和java的特点一样,也可以被重构
  30.  
  31. 1 每一个函数对象都有一个prototype属性,指向显示原型对象Object(空对象),
    2 对象的显示原型是undefined。隐示原型是objectName.__proto__ 原型指向一个空对象
    当定义一个函数对象时,做了一个事, fun.prototype = {};
    当利用函数对象创建实例对象时, 做了一个事情,object.__proto__ = fun.prototype
  32.  
  33. 程序员可以调用显示原型,es6之后不能调用隐示原型
  34.  
  35. 七,
    函数提升和变量提升
    通过var定义的函数和变量,在定义之前调用都是undefined
    函数通过function定义,可以在定义之前调用
  36.  
  37. 先变量提升,然后函数提升.
    如果属性和函数的名字一样,会在预定义处理的时候,先给变量入栈,然后函数入栈,函数同名,会取代同名变量。如果上下文在执行代码的时候给变量赋值,按顺序取代
  38.  
  39. 八,
    全局变量和window上下文
    在开始执行全局代码之前,会预处理全局上下文。
    1. var 都会被赋值undefined
    2. function定义的函数,被赋值为定义的对象
    3. thiswindow
    4.开始执行代码
    函数调用时的准备:
    和执行全局代码差不多
    有几点不同: 执行上下文指的是当前函数内部的声明代码体
    有一个argument属性,指的是当前形参的伪数组,就是形参的数值
  40.  
  41. 在上下文中声明的变量,只要是var生成的,(不算函数内部的,只在当前上下文)不管是局部的还是全局的,都会在当前上下文开始执行代码前,在上下文中被处理,值被赋予undefined,添加进当前上下文
  42.  
  43. 九,作用域
    就这三种作用域
    1.全局作用域,
    2.函数作用域
    如果在函数作用域中找不到,就会找全局作用域,所以在对象内部,必须添加this才能调用在对象内的属性和函数
    3.没有块作用域(ES6之后有),和java不同。在if中内定义的变量,外部能访问到。
  44.  
  45. 十,作用域和执行上下文的区别
    1. 全局作用域之外,每个函数都会创建自己的作用域,作用域在函数定义时就确定了
    执行上下文,在js代码执行之前,才确定
    2. 作用域是静态的,只要定义好就一直存在,且不会变化
    上下文环境是动态的,调用函数时创建,函数调用结束后才会被释放
    3. 上下文环境(对象)从属于所在的作用域
  46.  
  47. 循环执行
    setInterval()
    延迟执行
    setTimeout()
  48.  
  49. 十一:
    闭包:
    1,如何产生闭包:
    当嵌套的内部函数引用外部父函数的变量(函数),就产生闭包
    引用变量的内部函数被定义
    2,如何理解闭包:
    1. 闭包是内部嵌套函数
    2. 闭包是引用父函数的对象
    闭包存在于嵌套的内部函数中
    3 闭包产生条件:
    1. 一定是函数内的嵌套函数
    2. 一定要引用父函数中的变量或函数
    4,内部的嵌套函数产生闭包的时机:
    函数定义执行的时候
  50.  
  51. 5,常见的使用方式
    1.将函数作为另一个函数的返回值
    function f1(){
    function f2(){}
    return f2
    }
    父函数被调用几次,闭包就创建几个
    2. 将函数作为实参传递给另一个函数调用
  52.  
  53. 6. 作用:
    1. 使函数内部的变量在函数执行完之后(函数执行完之后,会释放内部变量和没有被引用的函数对象,),任然存活在内存中。 只有在闭包存在的才会存活下来
    2. 函数外部能够利用内部函数仍然可操作被引用的变量
  54.  
  55. 7,死亡:
    包含闭包的对象成为垃圾对象

JS高级-原型等概念深入理解的更多相关文章

  1. JS高级——原型链

    构造函数 构造函数是特殊的函数,里面没有returen返回值 new的过程中,会自动将对象返回,不需要return new的过程中,会执行函数中的代码,会将创建的对象赋值给构造函数中的this 基本概 ...

  2. js 高级 原型与原型链

    * 所有函数都有一个特别的属性: * `prototype` : 显式原型属性* 所有实例对象都有一个特别的属性: * `__proto__` : 隐式原型属性 1.  每个函数都有一个prototy ...

  3. 笔记-JS高级程序设计-基本概念篇

    1:JS中的一切(变量,函数名和操作符)都是区分大小写的 2:标识符(变量,函数,属性的名字,以及函数的参数),第一个字符必须是字母,下划线,或者美元$,书写方式采用驼峰式,不能将关键字作为标识符. ...

  4. js高级-原型链

    JavaScript是基于原型的面向对象的语言(相当于一个基类,父类),而不是像Java通过类模板构造实例,通过原型实现属性函数的复用 函数都有 prototype属性 指向函数的原型对象 只有函数根 ...

  5. JS高级---原型和原型链

    原型和原型链 原型链是一种关系, 实例对象和原型对象之间的关系,关系是通过实例对象中浏览器使用的原型(__proto__)来联系的 自定义构造函数,通过实例化,创建实例对象 实例对象中__proto_ ...

  6. JS高级---原型的简单的语法

    原型的简单的语法 构造函数,通过原型添加方法,以下语法,手动修改构造器的指向 实例化对象,并初始化,调用方法 <!DOCTYPE html> <html lang="en& ...

  7. JS高级---原型的引入,原型添加的方法解决数据共享

    原型的引入:解决:通过构造函数创建对象带来的问题,即浪费内存(一个对象开一个内存,多个对象开多个内存) 通过原型来添加方法,解决数据共享,节省内存空间 <script> function ...

  8. js中原型的概念

  9. 个人对JS原型链的一些理解(prototype、__proto__)

    前言 在我一开始学习java web的时候,对JS就一直抱着一种只是简单用用的心态,于是并没有一步一步地去学习,当时认为用法与java类似,但是在实际web项目中使用时却比较麻烦,便直接粗略了解后开始 ...

随机推荐

  1. Android:(本地、可通信的、前台、远程)Service使用全面介绍

    2.具体使用解析 2.1 本地Service 这是最普通.最常用的后台服务Service. 2.1.1 使用步骤 步骤1:新建子类继承Service类 需重写父类的onCreate().onStart ...

  2. springMVC文件上传与下载(六)

    1..文件上传 在springmvc.xml中配置文件上传解析器 <!-- 上传图片配置实现类,id必须为这个 --> <bean id="multipartResolve ...

  3. Debian 无线网卡驱动问题

    参考这里:https://wiki.debian.org/iwlwifi Debian 9 "Stretch" Add a "non-free" compone ...

  4. Pytorch 入门之Siamese网络

    首次体验Pytorch,本文参考于:github and PyTorch 中文网人脸相似度对比 本文主要熟悉Pytorch大致流程,修改了读取数据部分.没有采用原作者的ImageFolder方法:   ...

  5. ReLu、LeakyRelu、PReLu(转载)

    转载链接:http://blog.csdn.net/cham_3/article/details/56049205

  6. 【vim】跳转到上/下一个修改的位置

    当你编辑一个很大的文件时,经常要做的事是在某处进行修改,然后跳到另外一处.如果你想跳回之前修改的地方,使用命令: Ctrl+o 来回到之前修改的地方 类似的: Ctrl+i 会回退上面的跳动.

  7. Python3学习笔记22-文件读写

    读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操 ...

  8. tomcat配置文件context.xml和server.xml分析

    在tomcat 5.5之前Context体现在/conf/server.xml中的Host里的<Context>元素,它由Context接口定义.每个<Context元素代表了运行在 ...

  9. 解决sdk更新时候报错 http://dl-ssl.google.com/android上不去,链接拒绝

    解决国内访问Google服务器的困难: 启动 Android SDK Manager : 打开主界面,依次选择「Tools」.「Options...」,弹出『Android SDK Manager - ...

  10. SonarQube代码质量管理工具的升级(sonarqube6.2 + sonar-scanner-2.8 + MySQL5.6+)

    SonarQube升级注意事项 0. 前提条件 如果之前是使用sonarqube5.2 + sonar-runner-2.4 +MySQL5.5版本或者类似的组合. 安装方法请参照SonarQube代 ...