美文网首页
重看js教程小记

重看js教程小记

作者: 天一呀 | 来源:发表于2019-04-21 21:20 被阅读0次

又重新了下js教程https://wangdoc.com/javascript/oop/new.html
记录以下问题

(ps:每一次看的时候都有新的感悟,但是都没记录下来)

1. 对象是什么?第一反应是,,封装,继承,多态。。

简单来说就是 属性和方法的集合(c++,oc上的对象是结构体,js一度认为js上的对象不就是字典嘛不就是map嘛)

Map对象是一种有对应 键/值 对的对象, JS的Object也是 键/值 对的对象 ;

ES6中Map相对于Object对象有几个区别:

  1. Object对象有原型, 也就是说他有默认的key值在对象上面, 除非我们使用Object.create(null)创建一个没有原型的对象;
  2. 在Object对象中, 只能把String和Symbol作为key值, 但是在Map中,key值可以是任何基本类型(String, Number, Boolean, undefined, NaN….),或者对象(Map, Set, Object, Function , Symbol , null….);
  3. 通过Map中的size属性, 可以很方便地获取到Map长度, 要获取Object的长度, 你只能用别的方法了;

总结一句话:Object 结构提供了“字符串—值”的对应,Map 结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。如果你需要“键值对”的数据结构,Map 比 Object 更合适。

2. 构造函数

构造函数的特点有两个。

  • 函数体内部使用了this关键字,代表了所要生成的对象实例。
  • 生成对象的时候,必须使用new命令。

3. new命令的原理

  1. 创建一个空对象,作为将要返回的对象实例。
  2. 将这个空对象的原型,指向构造函数的prototype属性。
  3. 将这个空对象赋值给函数内部的this关键字。
  4. 开始执行构造函数内部的代码。

判断是不是用new来调用 this instanceof Classnew.target

4. this关键字

直接上代码

  var obj ={
      foo: function () {
        console.log(this);
      }
  };
  obj.foo() // obj
  // 情况一
  (obj.foo = obj.foo)() // window
  // 情况二
  (false || obj.foo)() // window
  // 情况三
  (1, obj.foo)() // window

最后还想说一下要注意闭包是不能捕获this的,解决办法 1. that(局部变量) 2. bind 3.箭头函数

下一次记录后三节

相关文章

网友评论

      本文标题:重看js教程小记

      本文链接:https://www.haomeiwen.com/subject/qjyjgqtx.html