JS启示录——深入了解JS对象_JavaScript启示录书评-查字典图书网
查字典图书网
当前位置: 查字典 > 图书网 > 编程 > JavaScript启示录 > JS启示录——深入了解JS对象
Jane001 JavaScript启示录 的书评 发表时间:2015-03-14 10:03:02

JS启示录——深入了解JS对象

JS对象

    JS几乎所有东西都是对象或用起来像对象

摘要

    自定义构造函数,保持名称第一个字母大写
    字面量表达式创建对象
    {},[]创建的是对象
    1,’string’,true,创建的是原始值
    new关键字调用构造函数的语法来创建对象
    new Number()
    new String()
    new Boolean() 创建的是对象
    Number()
    String()
    Boolean() 没有new关键字的,则创建的是原始值
    null undefined是原始值
    原始值 按值复制;对象 按引用存储,===比较是否指向同一个对象

    构造函数实例都拥有指向其构造函数的constructor属性,instanceof只适用于构造函数创建返回的复杂对象和实例

    相较于点,中括号可用来访问特殊名的属性
    in可坚持一个对象的属性,包括原型链;hasOwnProperty()可检查来自非原型链属性的对象

Chapter4 函数

    函数返回值默认undefined,构造函数返回值为对象实例
    函数是对象,因为可有属性,是个值(最终返回值)
    this arguments适用于所有函数,argums.callee
    函数定义有三种
        函数构造函数new Function()
        函数语句function a(){}
        函数表达式var a = function(){}
    调用函数,call(),apply()区别是参数传递的不同,前者传递多个分开的参数,后者传递多个参数组成的数组
    自调用的函数表达式,若要立即调用函数,需在函数外面的圆括号,或任何将函数转换为表达式的符号。
    (function (){}()) ,(function (){})(),!function (){}(),var a = function (){}()
    function (){}()不会立即执行
    函数表达式没有被提升,只有函数语句被提升,即函数定义前可被调用

Chapter5 head/全局对象

    head对象,包含所有对象的对象浏览器是window,this
    全局对象,全局属性是直接包含在head对象内不的值
    显示引用head,性能代价高,若只依靠作用域链,避免显示引用head会更快

Chapter6 this

    this在函数内部使用,引用包含函数的对象
    自定义构造函数:new,this指对象实例;若没有new,this是上下文
    call apply,控制this值
    this的宿主函数北封装在另一个函数内或另一个函数的上下文中被调用,this永远是对head对象的引用;可在父函数that保留this引用
    构造函数的prototype属性的函数中使用this,this引用调用方法的实例

Chapter7 作用域&闭包

    作用域是执行代码的上下文,js作用域包括全局作用域,函数作用域,eval作用域
    作用域链(词法作用域):包含函数的函数,会创建堆栈执行作用域,这些链接在一起的栈称为作用域链;
    var vs 全局作用域
    函数定义时确定作用域,而非调用时确定,所以又叫词法作用域
    闭包:让函数向全局作用域返回一个嵌套函数,但该函数仍能通过作用域链访问其父函数的作用域;闭包是由作用域链引起的
        作用域链式基于代码的编写方式创建的,而不是基于调用函数所在的上下文,这使得函数即使从一个不同的上下文调用函数,也能够访问最初编写代码时所在的作用域,这称为闭包。

Chapter8 函数原型属性

    原型链 最后是Object.prototype
    默认的prototype属性是Object()对象
    myArray.proto或myArray.constructor.prototype引用Array.prototype
    用新对象替换prototype属性回删除默认构造函数属性,constructor
    Array.prototype={},myArray.constructor===Object();所以要Array.prototype={constructor:Array};
    用新对象替换prototype属性不会更新以前的实例:Array.prototype={a:1}不会更新;Array.prototype.a=2会更新
    原型继承链,实例化想要继承的对象,将该对象实例作为要继承该对象实例的函数的prototype属性值,eg:
    var Person = function () { } var Chef = function () { } Chef.prototype = new Person(); var cody = new Chef()

Chapter12 Boolean()

    Boolean(0 -0 null false NAN undefined “”) 都是false
    非原始false布尔对象转换为true,eg:
    Boolean('false')//true var falseValue=new Boolean(false); if(falseValue){console.log('falseValue is truthy');}

Others

    直接在原始数字上访问属性时,该值被当作对象之前必须进行评估,1..toString(),第一个点被认为是数字十进制的小数点;临时包装器对象
    null可表明属性拥有一个空值,等待赋值;typeof null返回object,===null 来判断,==无法区分null和undefined
    undefined告诉你有东西丢失了;永远不要将一个值设置为undefined,若制定一个属性或变量值不可用,应为null
        声明的变量未指定值
        试图访问的对象属性未定义,并且不存在于原型链
    undefined in this全局作用域定义undefined

展开全文
有用 0 无用 0

您对该书评有什么想说的?

发 表

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读