【重温JS】巩固基础-构造函数 & 原型和原型链

321 阅读5分钟

这是我参与8月更文挑战的第27天,活动详情查看:8月更文挑战

☆☆☆ 今天学习的内容: ( 原型和原型链 | 工厂模式 | 构造函数 ) !查缺补漏! ☆☆☆

可作为初学者的学习路线, 可参考一下, 学习进度也不是特别赶! 持续学习更新中

结合自己的理解, 用白话文简单又全面概括 JavaScript 学习过程中的基础知识点, 方便加深理解!

开始今天的学习吧! '打牢地基才能筑高楼'! 加油! 认真对待!!

1、梳理昨日知识点:

( 面向对象 | 面向过程 | 类和对象 )

  • 对象:
  • 面向对象
  • 类和对象
  • 面对对象和面向过程

2、对象创建的几种方式

2.1 字面量 { }new 方式创建对象

var obj = {
  sname : "lichune",  属性
  tel : "666",
  teach : function(){  方法

  }
}
var obj = new Object();
  obj.sname = "lce";
  obj.eat = function(){

  }

缺点 : 创建多个同类对象时,代码会重复     此种方案只适用于一次创建一个对象

3、设计模式之---工厂模式

3.1 定义:

工厂模式 : 可以创建多个同类的对象

3.2 创建方式:

1--需要一个工厂   一个函数

    function 工厂(){
        1--备料--创建一个对象
        var obj = new Object();
        2--加工--为对象添加属性和方法
        obj.属性=
        obj.方法=
        3--出场--返回创建的对象
        return obj
    }
  • 优点 : 创建多个同类对象时,代码不会重复书写
  • 缺点 :
    • 1、  一般对象是通过 new 关键字创建的,而工厂模式创建对象只是一种普通函数的调用 , 不符合对象的创建方案   不提倡使用
    • 2、 不能确定某个对象属于哪一个构造函数(类)

扩展 : instanceof   测试某个对象属于哪一个构造函数

用法 :   对象  instanceof 构造函数   返回值是布尔类型

4、构造函数

说明 :

  • 1、一般为了和普通函数进行区分,构造函数的函数名编写规范是   大驼峰   编写规范

  • 2、写在构造函数内部的属性   叫做实例属性    方法叫做   实例方法

  • 3、构造函数内的 this 指向通过构造函数 new 出来的对象

  • 优点 : 对象创建方式规范,是通过 new 关键字创建的

能确定某个对象属于哪一个构造函数(类)

  • 缺点 :

多个同类对象被创建时,相同的方法会被 重复创建

5、原型

将属性和方法写在构造函数的外面

说明 :

  • 1、写在构造函数外面的属性叫做原型属性   方法叫做原型方法
  • 2、通过   构造函数.prototype.属性   创建原型属性        构造函数.prototype.方法   创建原型方法

优点 :

多个同类对象的相同方法是共享的   不会被重建

缺点 :     所有对象的属性名都相同

6、混合

  • 将属性写成实例属性
  • 将方法写成原型方法

解决了上面创建对象时遇到的所有的 缺点

7、原型对象

所有的构造函数都有一个prototype 属性,这个属性就叫做原型对象

所有的构造函数 new 出来的对象都有一个原型对象   实现 :   对象.__proto__

在原型对象上创建的方法是共享的。

Array.prototype

面试题 : 在 Array 的原型上实现数组的去重

8、原型模式的执行流程

首先在实例上查找,如果有实例属性或方法   就返回   ,如果没有,就去原型上查找 如果有就返回

如果原型上没有对应的属性或方法,就去最外层的 Object.prototype上查找   如果有就返回,没有返回 undefined

9、原型链

实例对象和原型之间的连接     就叫做原型链

原型链和作用域链

作用域链 :   首先在函数内部查找某个变量,如果有就返回   不再向外查找,否则继续向函数外面查找

10、原型中的关键字(扩展)

测试某个对象是否属于某个类的方法 isPrototypeOf()

语法: 构造函数.prototype.isPrototypeOf(对象): 判断一个对象是否指向了该构造函数的原型对象,可以使用 isPrototypeOf() 方法来测试       结果为 boolean 类型    同   instanceof

delete :删除实例属性

语法 :  delete 对象.实例属性

hasOwnProperty() 是否包含该实例属性, 包含返回 true,否则返回 false

语法: 实例对象.hasOwnProperty("实例属性")

in 是否存在该属性(原型或实例中)

语法: "属性" in 对象实例


预告: 加油, 追梦人

学习就是一个不断进行的过程, 坚持下去, 定有收获!

日积月累, 巩固基础, 早进大厂!

坚持很不容易, 坚持下来更不容易, 你真棒!

Calm Down & Carry On!


更多阅读:

前文更新回顾

【重学 JS】每天学习巩固基础系列文章:

【重温 JS】巩固基础-面向对象/面向过程/类和对象

【重温 JS】巩固基础之-ajax 原理/缓存/接口【重温 JS】巩固基础 day23-前端也要了解一些数据库

【day1】js 初始

【day2】各种运算符【day3】数据类型【day4】循环结构 & 条件语句【day5】函数(重点)【day6】作用域 & 事件

【day7】对象 & 数组方法总结【day8】字符串方法 & 部分排序

【day9】Math 对象 & 封装函数【day10】BOM-浏览器对象模型

【day11】DOM-文档对象模型

【day12】Event 事件对象初识(一)【day13】Event 事件对象初识(二)

【day14】事件委托 & 拖拽原理

【day15】拖拽实现 & 正则初识【day16】正则具体方法

【day17】cookie【day18】ES6

【day19】Js 运动函数的封装

【day21】前三周学习复习

【day22】服务器端和客户端

更多期待在路上...任重而道远==-..-==