JS对象分类

2019-09-29  本文已影响0人  郑馋师

分类原因:
分类就可以少占内存

new语法

将函数与原型结合

函数的特征

  1. 都有prototype属性,存储原型地址
  2. 每个prototype都有一个constructor属性,是来告诉别人构造这个属性的爹是谁

new语法的写法和特征

newX()
特征

  1. 自动创建一个新的对象
  2. 自动为空对象关联原型,原型地址为X.prototype
  3. 自动将不知道叫什么的空对象,作为this语法的关键字,来运行构函数(构造函数是指创建对象的函数)
  4. 自动return this
    eg.
function Person(name, age) {//()里写变量名,function Person{}里面写自身所有属性
  this.name = name;
  this.age = age;
}
Person.prototype.sayHi = function() {//这里Person.prototype.后面加共有属性的名字,且下面写的是共有属性
  console.log("你好,我叫" + this.name);
};
let person = new Person("frank", 18);
person.name === "frank"; // true
person.age === 18; // true
person.sayHi(); // 打印出「你好,我叫 frank」

构造函数X(名字为X)

  1. X函数本身负责给对象添加属性
  2. X.prototype对象负责保存对象的共有属性

规范

  1. 大小写
  1. 词性

class 语法

  1. JS 构造对象目前有两种方式,一种是用构造函数+prototype(new语法),一种是用 class,关于这两种方式,两者方式 JS 都支持,JS 是一门包容的语言,提供了多种表达形式,两者方式都能表达程序员的思想。
  2. 构造函数+prototype 是先提供的,class 是后提供的,说明 构造函数+prototype 是 JS 一开始的基因,而 class 的粉丝其实更喜欢 class,所以两种都有必要学习。
    class是es6新出的功能,与prototype那个语法功能相同
    eg.
  constructor(name, age) {//()里面写的是变量名
    this.name = name;//{}constructor里面写的是自身所有属性
    this.age = age;
  }
  sayHi() {//constructor外面外面这里写的是公有属性,Sayhi是共有属性的名字
    console.log("你好,我叫" + this.name);
  }
}
let person = new Person("frank", 18);
person.name === "frank"; // true
person.age === 18; // true
person.sayHi(); // 打印出「你好,我叫 frank」

数组对象

  1. 定义数组
let arr=[1,2,3]===let arr=new Array(1,2,3)

2.自身属性:长度(无法用object.keys查出)

  1. 常用API,上mdn查

函数

  1. 定义函数
    eg.
function fn(x,y){return x+y}
===let fn=function fn(x,y){return x+y}
===let fn=(x,y)=>{x+y}
## 原型公式
如何确定原型:

let obj=new Object()

new什么,就是什么.prototype,比如这里就是Object.prototype
对象.___proto___===构造函数.prototype
## 坑
1. 属性不等于属性值,属性是名,是key,属性值是值。
2. JS类型不等于JS分类,类型是四基而空一对象,分类的是只有对象有分类,
JS 中的类型有:数字、字符串、布尔、符号Symbol、null、undefined、对象
 JS 中的类有:对象 Object、数组 Array、函数 Function 等
3. Object.prototype
* 是一个对象(这么说不严谨,应该说 Object.prototype 保存着一个对象的地址)
* 包含了 toString、valueOf、hasOwnProperty 等对象共有的属性
* Object.prototype 是所有对象的原型(除了它自己)
* Object.prototype 自己的原型为 null,Object.prototype 是根对象
4. window.Object 是一个函数对象,那么这个函数对象的构造函数是Function
5. window.Function 是一个函数对象,那么这个函数对象的构造函数是Function
6. window.Object 是一个函数对象,那么这个对象的 __proto__ 是Function.prototype
7. window.Function 是一个函数对象,那么这个对象的 __proto__ 是Function.prototype
上一篇 下一篇

猜你喜欢

热点阅读