高级js--基础篇01

面向对象三大特征

  • 继承 封装 多态(抽象)
  • 面向对象写法(构造函数+原型链)
    1.属性一般通过this写在构造函数里
    2.公有方法一般通过prototype原型对象来写

function Person(name){
this.name=name
}
Person.prototype.eat=function(){
console.log(eat)
}
var p1=new Person(‘张三’)

  • 组合继承(构造函数+原型链)
    1.通过构造函数里的引入父类型的对象,call来改变this的指向子类型,从而继承父类型的私有属性
    2.通过new一个父类型,赋值给子类型的prototype,继承父类型的属性和方法(主要),重设子类型的构造函数
 function Person(options){
	options=options || {}
		//防止我们继承父类型原型链,未赋值导致变量找不    到,其实我们是放在子类型实例中了,搭配new 实例
		this.name=options.name || '匿名'//保持代码健壮性
		this.age=options.age  ||  0
	}
       Person.prototype.sayHi=function(){
		console.log('nihao')
	}
	function Student(options){
	//解决多个实例this之间相互影响,继承父类型构造函数
		Person.call(this,options)
		this.score=options.score || 0
		this.sex=options.sex || '男'
	}
        Student.prototype=Object.create(Person.prototype)//避免继承了私有属性,还有new实例未传参导致报错,最优解
	//Student.prototype=new Person()
	//子类型继承父类型中的方法和属性,解决原型对象赋值导致子类型添加的公有方法同时赋值父类型,同时子类型的prototype会被父类型覆盖
	Student.prototype.constructor=Student//重设构造函数,解决继承链紊乱
	Student.prototype.exam=function(){//不能放在前面
		console.log("考试")
	}	

  var stu1=new Student({name:'三',age:18,score:100,sex:'男'})
  stu1.score=80
  console.dir(stu1)
  var stu2=new Student({age:20,score:90,sex:'男'})
  console.dir(stu2)
  var p1=new Person({name:'wo',age:20})
  console.dir(p1)
如图所示

image.png

instanceof的使用方法

  • 检测某个对象是否是另一个对象的实例
  • 适用于检查构造函数的实例
  • 具体操作:

function Nihao(name){ this.name=name }
var nihao=new Nihao()
console.log(nihao instanceof Nihao)//结果为true
console.log(typeof nihao)//结果为object


如图所示image.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值