高级js–基础篇01

  • Post author:
  • Post category:其他




面向对象三大特征

  • 继承 封装 多态(抽象)
  • 面向对象写法(构造函数+原型链)

    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



版权声明:本文为qq_41245647原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。