JS-7:JS对象分类

159 阅读2分钟

1 new的作用

  • 代码对比 image.png

1.1 new X() 的作用

  • 自动创建空对象;

  • 自动为空对象关联原型,原型地址指定为X.prototype;

  • 自动将空对象作为this关键字运行构建函数;

  • 自动return this;

1.2 构造函数 X

  • 构造函数就是可以构造出对象的函数;

  • X 函数本身负责给对象本身添加属性;

  • X.prototype 对象负责保存对象的共用属性;

image.png

2 代码规范

2.1 大小写

  • 所有构造函数(专门用于创建对象的函数)首字母大写

  • 所有被构造出来的对象,首字母小写

2.2 词性

  • new 后面的函数,使用名词形式,如 new Person()、new Object()

  • 其他函数,一般使用动词开头,如 createSquare(5)、createElement('div')

3 原型

3.1 原型公式

对象.__proto__ === 其构造函数.prototype

例如:obj.__proto__ === Object.prototype

3.2 prototype 与 proto 的区别

  1. 所有函数一出生就有一个prototype属性(除了箭头函数);

  2. 所有prototype一出生就有一个constructor属性;

  3. 所有constructor属性一出生就保存了对应的函数的地址;

  4. 如果一个对象不是函数,那么这个对象一般来说没有prototype属性,但这个对象一般一定有__proto__属性;

  5. Object.prototype.__proto__是null;

  6. X的原型等价于 X.__proto__所指的对象,为了方便,可以认为 X的原型等价于X.__proto__但是,X的原型不等于 X.prototype ;

  7. 参考资料:JS 中 proto 和 prototype 存在的意义是什么?

4 对象的分类

4.1 类型 VS 类

  • 类型:是JS数据的分类,有7种,四基两空一对象;

  • 类:是针对于对象的分类,有无数种,常见的有:Array、Function、Date等;

  • 数组对象

image.png

  • 函数对象

image.png

4.2 window、window.Object、window.Function

  • window.Object是一个函数对象 image.png

image.png

5 class构造对象

5.1 class 中第一种函数写法

  • 方法挂在原型上,一般不在这个语法里使用箭头函数
class Person{
  say(name){}  
等价于
function Person(){}
Person.prototype.say = function(name){}

image.png

  • width = 0 的意思是width的默认值为0;

5.2 class中第二种函数写法

  • 一般不在这个语法里使用普通函数
class Person{
  say = (name)=>{} 
  
  等价于
function Person(){
  this.say = (name)=>{}
}

5.3 class中原型的写法

image.png

6 ES6新语法