一、类(构造函数)和对象
重复代码的复用常用: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 {
}