1.2 面向对象编程 原型及原型链

面向对象

对象是什么? 为什么要面向对象?

特点:面向对象——逻辑迁移更加灵活、代码复用性高、高度的模块化
对象的理解——并不是指传统js中的object对象
  • 对象是对于单个物体的简单抽象
  • 对象是一个容器,封装了属性 & 方法
let obj = {
	name:'yy',
	coures:'oop'
}
// thinking1
obj = {
	name:'xm'
}
obj.name = 'jcss'
// thinking2
obj1 = {
	name:'xm'
}
obj2 = {
	name:'jcss
}
obj3 = {
	name:'teacher'
}

// 简单对象
const course = {
	teacher:'yy',
	course:'oop',
	startCourse:function(){
		// 开始课程
	}
}
// 函数对象
function Course(){
	this.teacher='yy'
	this.course='oop'
	this.startCourse = function() {}
}

构造函数

需要一个模版 - 表征了一类物体的共同特征,从而生成对象
类即对象模版
function Cuorse(teacher){
	this.teacher=teacher
	this.course='oop'
	this.startCourse = function() {}
}
const course = new Course('yy')
const course1 = new Cuorse('zz')
Course 本质就是构造函数

面试题:

  • 1、函数体内使用的this,指向所要生成的实例
  • 2、生成对象使用new来进行实例化
  • 3、可以做初始化传参
追问:
如果构造函数不初始化,可以使用吗?— 无法正确使用(内部this指向window)
如果项目中需要使用,通常(不被外界感知)如何解决?
let staticProps = undefined
function Course() {
	const _isClass = this instanceof Course
	if(!_isClass) {
		staticProps = new Course()
		return staticProps
	} else {
		return staticProps
	}
	this.teacher = 'yy'
    this.course = 'oop'
	this.startCourse = function() {}
}
// 使用方
const course = Course()
// 暴露出去的是实例,而将实例化的过程放置在下层不背上层所感知
* 启发:如果写底层代码时,不需要让外界熟悉感知内部代码思想
* 延伸:通过改进 => 不多次实例化,同一个实例 => 单例模式
思考:new是什么? / new的原理 / new的时候做了些什么?
function Course (teacher, course) {
	this.teacher = teacher
	this.course = course
}
const course1 = new Course('yy', 'oop')
const course2 = new Course('zz', 'js')
  • 1、结构上:创建了一个空对象,作为返回的对象实例
  • 2、属性上:将生成的空对象和类产生了关联 => prototype
  • 2.5、属性上:将生成的对象的原型对象指向了构造函数的prototype属性
  • 3、关系上:将当前实例对象赋给了内部this
  • 4、声明上:构造函数初始化代码的执行
  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值