工厂函数和构造函数的应用,面向对象编程

一、类(构造函数)和对象

重复代码的复用常用:for/functon。

1.工厂函数(一种设计模式):工厂函数在打印对象时,对象的类型都是object类型。
function createStudent(name,age,height) {
var stu = {} // 创建对象
stu.name = name
stu.age = age
stu.height = height
stu.running = function() {
  console.log("running")
 }
 return stu
}


var stu1 = creatStudent("why",18,1.88)
var stu2 = creatStudent("kobe",30,1.98)
var stu3 = creatStudent("james",35,2.05)
// 创建新的对象并传入参数
2.New操作符,这种函数也称为构造函数
funtion Coder (name,age,height) {
                     // 删除此行,为了防止stu不存在报错,this一般会指向某个对象。目前是被指向window的,但被调用时候,会自动指向调用来源。    // 删除此行,也需要用new来补充创建新对象的功能。
    
  this.name = name   // 改成this。
  this.age = age
  this.height = height
  this.rinning = funcition () {
      console.log("running")
  }
    //删除了返回行
} // 构造函数

new操作符:调用了函数,创建了空对象,指明了this,并进行了返回。


CLASS ↑类(图纸,描述,模板):图纸实体不存在。调用方式,用new来调用。
-------------------------------------------------
OBJECT ↓对象(房子) 实例对象
对象是由类创建出来的,根据类创建出具体的对象

var stu 1 = new Coder ("why",18,1.88) //在函数调用前加new关键字,为操作符,有4种作用。
console.log(stu1)

类方法:类调用的

对象方法=实例方法吗,实例方法就是对象调用的 √√√

New操作符

  • 创建一个空的对象

  • 将构造函数的this指向这个空的对象

  • 执行函数体中的代码

  • 默认返回创建出来的这个对象

3.构造函数为什么是面向对象的?

工厂函数的弊端,打印出来的都是object类型的。

  • 构造函数也称之为构造器(construnctor),通常是在创建对象时会调用的函数。(以前的函数一般都是完成功能。构造函数是用来创建对象)

  • 在其他面向的编程语言里面,构造函数存在于类中,称为构造方法。

  • JS中构造函数扮演了其他语言中类的作用。

    系统默认提供的Date的函数是Dateconstrutor。构造函数可以通过function和new两种方式调用。

  • 在ES5之前,都是用function来声明一个构造函数(类),之后通过new关键字来对其进行调用。ES6后用class来声明一个类。

WHY:

1.这种方法称为面对对象编程,但是JS是多范式编程,可以使用函数式编程,面对对象编程,声明式编程。

2.前端经常使用服务器返回的对象列表,往往进行遍历即可,创建新对象的情况较少。

3.在react里进行组件化开发,早期封装组件都是用class开发的,现在reacthook里更多使用function。

4.对象包括

对象是一种数据类型

  • 常用的基本数据类型包括undefined、null、number、boolean、string;

  • 引用数据类型也就是对象类型,比如内置对象,全局对象,自定义对象,内置对象包括Object、array、function、data等。

1.内置对象:Math, Date, Array, String,Function等。

var foo = function(){} 函数表达式就是创建对象的模式

因为var obj = {}创建对象和new Object()都是在堆内存创建一个新的对象,本质相同,则函数即可写成:

var foo = function(){}

var foo = new Function{}
则function也是对象。

因为函数也是对象,即可通过类似于

var info = {}
info.name = "abc"

这种方法给函数添加属性

funciton sayHello(){
}
sayHello.age = 18
console.log(sayHEllo.age)

还可以用这种方法给函数的属性添加方法(对象内的函数)。

function Dog(){
}
Dog.running = function(){}
Dog.running() //用类名(构造函数的名字)调用的函数

这种往构造函数(?)上添加函数的方法叫做类方法。

2.浏览器对象(全局对象):

  • window 对象是最顶层的对象;查找对象时,最终会查找到window上;将一些浏览器全局给我们提供的属性/对象/变量都放在window上面;在创建对象时,var obj = new Object时,这个Object也是在Window上定义的;使用var定义的变量会被添加到window上面。

  • window 对象有6大属性,包括:document、frames、history、location、navigator、screen,这6大属性本身也是对象;

  • window 对象下的 document 属性也是对象,并且 document 下也有5大属性(anchors、forms、images、links、location)也是对象。

3.自定义对象

5.面向对象编程和面向函数编程
6.数组,对象,函数

对象是一种数据类型。

函数是一种对象。

数组是一种对象。数组是一种特殊类型的对象。 在 JavaScript 中对数组使用 typeof 运算符会返回 “object”。

二.构造函数的补充

1.构造函数的名称:首字母大写,使用大驼峰

2.平时创建普通的对象

var obj1 = {}

var obj2 = new Object()

var obj3 = new Person()

3.原型链,实现继承的方案

DOM类:

function EventTarget

function Node

function Element

4.类之间的继承关系

class Person = {
  construnco(name,age) {
  this.name = name
  this.age = age
  }
  running(){
}
}

class Student extends Person {

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值