最近学习typescript,发现es5用的类也就是构造函数差不多忘光了,现在有时间整理一下
es5中简单的类(构造函数以及原型链静态方法)
function Person() { //构造函数挂载属性以及方法
this.name="小明"
this.age = 18
this.run=function() {
console.log(`${this.name}在运动`)
}
}
//原型链上面的属性会被多个实例共享 构造函数不会(相当于共享单车和你自己的车)
Person.prototype.sex="男" //原型链挂载属性
Person.prototype.work=function(){ //原型链挂载方法
console.log(`${this.name}在工作`)
}
Person.getname = function (params) { //静态方法挂载
console.log('我是静态方法')
}
var p = new Person()
p.run()
p.work()
Person.getname() //静态方法调用
es5中继承(对象冒充继承)
function Person() { //构造函数挂载属性以及方法
this.name="小明"
this.age = 18
this.run=function() {
console.log(`${this.name}在运动`)
}
}
//原型链上面的属性会被多个实例共享 构造函数不会(相当于共享单车和你自己的车)
Person.prototype.sex="男" //原型链挂载属性
Person.prototype.work=function(){ //原型链挂载方法
console.log(`${this.name}在工作`)
}
// 子类 通过冒充对象方式继承
function Web(){
Person.call(this)
}
var w = new Web()
console.log(w.name) //正确
w.run()// 正确
w.work() // 报错 冒充对象继承并不能继承原型链上的属性以及方法
es5中继承(原型链继承)
function Person() { //构造函数挂载属性以及方法
this.name="小明"
this.age = 18
this.run=function() {
console.log(`${this.name}在运动`)
}
}
//原型链上面的属性会被多个实例共享 构造函数不会(相当于共享单车和你自己的车)
Person.prototype.sex="男" //原型链挂载属性
Person.prototype.work=function(){ //原型链挂载方法
console.log(`${this.name}在工作`)
}
function Web(){
}
//原型链继承
Web.prototype = new Person()
var w = new Web()
console.log(w.name)//可以打印
w.run() //可以打印
w.work() //可以打印
原型链继承可以继承构造函数以及原型连上的属性和方法,但是一旦传递参数子类接收不到
function Person(name,age) { //构造函数挂载属性以及方法
this.name=name
this.age = age
this.run=function() {
console.log(`${this.name}在运动`)
}
}
//原型链上面的属性会被多个实例共享 构造函数不会(相当于共享单车和你自己的车)
Person.prototype.sex="男" //原型链挂载属性
Person.prototype.work=function(){ //原型链挂载方法
console.log(`${this.name}在工作`)
}
function Web(){
}
//原型链继承
Web.prototype = new Person()
var w = new Web('xiaoming',18) //传递的参数接收不到
console.log(w.name) // undefined
w.run() //undefined在运动
w.work() //undefined在工作
es5中继承(原型链+对象冒充组合继承)
function Person(name,age) { //构造函数挂载属性以及方法
this.name=name
this.age = age
this.run=function() {
console.log(`${this.name}在运动`)
}
}
//原型链上面的属性会被多个实例共享 构造函数不会(相当于共享单车和你自己的车)
Person.prototype.sex="男" //原型链挂载属性
Person.prototype.work=function(){ //原型链挂载方法
console.log(`${this.name}在工作`)
}
function Web(name){
Person.call(this,name) //冒充对象继承
}
//原型链继承
Web.prototype = Person.prototype // 原型链继承
var w = new Web('xiaoming',18)
console.log(w.name) // xiaoming
w.run() //xiaoming在运动
w.work() //xiaoming在工作