ts学习04-Es5中的类和静态方法 继承

最简单的类

function Person() {
    this.name = "张三";
    this.age = 20;
}
var p = new Person();
console.log(p.name);//张三

构造函数和原型链里面增加方法

function Person(){
    this.name='张三';  /*属性*/
    this.age=20;
    this.run=function(){
        console.log(this.name+'在运动');
    }
}
//原型链上面的属性会被多个实例共享   构造函数不会
Person.prototype.sex="男";
Person.prototype.work=function(){
    console.log(this.name+'在工作');
}
var p=new Person();
console.log(p.name);//张三
p.run();
p.work();

在这里插入图片描述

类里面的静态方法

function Person() {
    this.name = '张三';  /*属性*/
    this.age = 20;
    this.run = function () {  /*实例方法*/
        console.log(this.name + '在运动');
    }
}

Person.getInfo = function () {
    console.log('我是静态方法');
}
//原型链上面的属性会被多个实例共享   构造函数不会
Person.prototype.sex = "男";
Person.prototype.work = function () {
    console.log(this.name + '在工作');
}
var p = new Person();
p.work();
//调用静态方法
Person.getInfo();

在这里插入图片描述

继承

对象冒充实现继承

function Person() {
    this.name = '张三';  /*属性*/
    this.age = 20;
    this.run = function () {  /*实例方法*/
        console.log(this.name + '在运动');
    }
}
Person.prototype.sex = "男";
Person.prototype.work = function () {
    console.log(this.name + '在工作');
}

//Web类 继承Person类   原型链+对象冒充的组合继承模式
function Web() {
    Person.call(this);    /*对象冒充实现继承*/
}
var w = new Web();
w.run();  //对象冒充可以继承构造函数里面的属性和方法
w.work();  //对象冒充可以继承构造函数里面的属性和方法   但是没法继承原型链上面的属性和方法

在这里插入图片描述

原型链实现继承

function Person() {
    this.name = '张三';  /*属性*/
    this.age = 20;
    this.run = function () {  /*实例方法*/
        console.log(this.name + '在运动');
    }
}
Person.prototype.sex = "男";
Person.prototype.work = function () {
    console.log(this.name + '在工作');
}

//Web类 继承Person类   原型链+对象冒充的组合继承模式
function Web() {}
Web.prototype = new Person();   //原型链实现继承
var w = new Web();
//原型链实现继承:可以继承构造函数里面的属性和方法 也可以继承原型链上面的属性和方法
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 + '在工作');
}

var p = new Person('李四', 20);
p.run();
p.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(name, age) {
}
Web.prototype = new Person();
var w = new Web('赵四', 20);   //实例化子类的时候没法给父类传参
w.run();
w.work();
var w1=new Web('王五',22);
w1.run();
w1.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(name, age) {
    Person.call(this, name, age);   //对象冒充继承   实例化子类可以给父类传参
}

Web.prototype = new Person();
var w = new Web('赵四', 20);   //实例化子类的时候没法给父类传参
w.run();
w.work();
var w1=new Web('王五',22);
w1.run();
w1.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(name, age) {
    Person.call(this, name, age);   //对象冒充继承  可以继承构造函数里面的属性和方法、实例化子类可以给父类传参
}
Web.prototype = Person.prototype;
var w = new Web('赵四', 20);   //实例化子类的时候没法给父类传参
w.run();
w.work();
var w1 = new Web('王五', 22);
w1.run()
w1.work();

在这里插入图片描述

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

假装我不帅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值