纯属个人学习,加深记忆使用。
es5中类的定义
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.run();
p.work();
Person.getInfo();
es5中的继承
对象冒充
function web() {
Person.call(this); //对象冒充实现继承
}
var w = new web;
w.run(); //可以继承构造函数的属性和方法
w.work()//错误 不能继承原型链上面的属性和方法
原型链
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 + "跑步");
}
}
function web(name,age) {
}
web.prototype = new Person();
var w = new web('赵四',20);
w.run();//输出为undefind,实例化子类的时候没法给父类传参
原型链和构造函数的组合继承
function web(name,age) {
Person.call(this,name,age); //对象冒充继承 实例化子类可以给父类传参
}
web.prototype = new Person();
另一种写法
function web(name,age) {
Person.call(this,name,age); //对象冒充继承 实例化子类可以给父类传参
}
web.prototype = Person.prototype;