《你不知道的javascript上卷》读书笔记(kyle simpson 著,赵望野、梁译)

一、关于this篇:

1.this实际上是在函数被调用时发生的绑定,它指向什么完全取决于函数在哪里被调用

2.this优先级:new>显示绑定>隐式绑定>默认绑定。

3.如果把null或undefined作为this的绑定对象传入call、apply或者bind,这些值在调用时会被忽略,实际应用的是默认绑定规则

eg:

function foo(){
  console.log(this.a);
}

var a=2;

foo,bind(null);  //2

4.将arguments(类数组)变为数组

(1)Array.prototype.slice.apply(arguments)     或   [].slice.apply(arguments)  或  new Array().slice.apply(arguments)

(2)es6扩展运算符...

function foo(...arg){
console.log(arg);
}


foo.apply(null,[155,2,3,4,56,7]);   或    foo(155,2,3,4,56,7)
二、对象篇

1.对象深拷贝与浅拷贝

(1)浅拷贝(还是引用obj对象)

obj={name:'min'}

obj2=Object.assign({},obj)

(2)深拷贝(完完全全复制)

obj={name:'min'}

obj2=Object.assign({},JSON.parse(JSON.stringify(obj)))

2.对象属性描述

var myObj={};

Object.defineProperty(myObj,"a",{

  value:2,

  writable:true,

  configurable:true,

  enumerable:true

});

不变:

(1)对象常量(不可修改、重定义、删除)

var myObj={};

Object.defineProperty(myObj,"a",{

  value:2,

  writable:false,

  configurable:false

});

(2)禁止扩展

var myObj={a:2};

Object.preventExtensions(myObj);

myObj.a=3;  

myObj.a;    //undefined (严格模式下:TypeError)

(3)密封(禁止扩展基础上加:configurable:false(不可重配、不可删除))  Object.seal(myObj)

(4)冻结(密封基础上加:writerble:false)Object.freeze(myObj);

3.对象的set和get

4.检查对象中属性是否存在

eg:obj={a:2}

(1)"a" in obj;/*检查属性“a”是否在obj的对象或是原型链上*/

(2)obj.hasOwnProperty("a");  /*只检查"a"是否在obj对象上(不含原型链)*/

(3)obj.propertyIsEnumerable("a");/*检查“a”是否在obj对象上(不含原型链)且满足 enumerable=true*/

(4)Object.keys(obj);/*obj所有可枚举属性*/

(5)Object.getOwnPropertyNames(obj);/*所有属性含不可枚举的*/

 

posted @ 2018-09-02 23:46  米牙  阅读(147)  评论(0编辑  收藏  举报