JavaScript高级第02天笔记

1.构造函数和原型

1.1对象的三种创建方式--复习

  1. 字面量方式

  2. new关键字

  3. 构造函数方式

1.2静态成员和实例成员

1.2.1实例成员

实例成员就是构造函数内部通过this添加的成员 如下列代码中uname age sing 就是实例成员,实例成员只能通过实例化的对象来访问

1.2.2静态成员

静态成员 在构造函数本身上添加的成员 如下列代码中 sex 就是静态成员,静态成员只能通过构造函数来访问

1.3构造函数的问题

构造函数方法很好用,但是存在浪费内存的问题。

1.4构造函数原型prototype

构造函数通过原型分配的函数是所有对象所共享的。

JavaScript 规定,每一个构造函数都有一个prototype 属性,指向另一个对象。注意这个prototype就是一个对象,这个对象的所有属性和方法,都会被构造函数所拥有。

我们可以把那些不变的方法,直接定义在 prototype 对象上,这样所有对象的实例就可以共享这些方法。

1.5对象原型

 

 

1.6constructor构造函数

如果我们修改了原来的原型对象,给原型对象赋值的是一个对象,则必须手动的利用constructor指回原来的构造函数如:

以上代码运行结果,设置constructor属性如图:

如果未设置constructor属性,如图:

1.7原型链

每一个实例对象又有一个proto属性,指向的构造函数的原型对象,构造函数的原型对象也是一个对象,也有proto属性,这样一层一层往上找就形成了原型链。

1.8构造函数实例和原型对象三角关系

 

1.9原型链和成员的查找机制

任何对象都有原型对象,也就是prototype属性,任何原型对象也是一个对象,该对象就有proto属性,这样一层一层往上找,就形成了一条链,我们称此为原型链;

1.10原型对象中this指向

构造函数中的this和原型对象的this,都指向我们new出来的实例对象

1.11通过原型为数组扩展内置方法

2.继承

2.1call()

2.2子构造函数继承父构造函数中的属性

  1. 先定义一个父构造函数
  2. 再定义一个子构造函数
  3. 子构造函数继承父构造函数的属性(使用call方法)

2.3借用原型对象继承方法

  1. 先定义一个父构造函数
  2. 再定义一个子构造函数
  3. 子构造函数继承父构造函数的属性(使用call方法)

如上代码结果如图:

3.ES5新增方法

3.1数组方法forEach遍历数组

3.2数组方法filter过滤数组

3.3数组方法some

3.4筛选商品案例

  1. 定义数组对象数据

  2. 使用forEach遍历数据并渲染到页面中

  3. 根据价格筛选数据

    1. 获取到搜索按钮并为其绑定点击事件

    2. 使用filter将用户输入的价格信息筛选出来

    3. 将筛选出来的数据重新渲染到表格中

      1. 将渲染数据的逻辑封装到一个函数中

      2. 将筛选之后的数据重新渲染

    4. 根据商品名称筛选

      1. 获取用户输入的商品名称

      2. 为查询按钮绑定点击事件,将输入的商品名称与这个数据进行筛选

3.5some和forEach区别

3.6trim方法去除字符串两端的空格

3.7获取对象的属性名

Object.keys(对象) 获取到当前对象中的属性名 ,返回值是一个数组

3.8Object.defineProperty

Object.defineProperty设置或修改对象中的属性