es5没有类的概念,使用function模拟类,使用大概如下
代码语言:javascript复制 function Parent(name,age){
this.name=name;
this.age=age;
}
Parent.prototype.say=function(){
console.log('你好' this.name);
}
var child=new Parent('星辰',18)
child.say()
当我们new一个构造器,主要有三步:
• 创建一个空对象,将它的引用赋给 this,继承函数的原型。 • 通过 this 将属性和方法添加至这个对象 • 最后返回 this 指向的新对象,也就是实例(如果没有手动返回其他的对象)
代码语言:javascript复制// ES5构造函数
let Parent = function (name, age) {
//1.创建一个新对象,赋予this,这一步是隐性的,
// let this = {};
//2.给this指向的对象赋予构造属性
this.name = name;
this.age = age;
//3.如果没有手动返回对象,则默认返回this指向的这个对象,也是隐性的
// return this;
};
const child = new Parent();
new 关键字大概 是使用构造函数的原型创建一个对象,然后调用构造函数初始化属性,最后根据构造函数返回值决定返回什么 • 以构造器的prototype属性为原型,创建新对象; • 将this(也就是上一句中的新对象)和调用参数传给构造器,执行; • 如果构造器没有手动返回对象,则返回第一步创建的新对象,如果有,则舍弃掉第一步创建的新对象,返回手动return的对象。
代码语言:javascript复制 function Parent(name,age){
this.name=name;
this.age=age;
}
Parent.prototype.say=function(){
console.log('你好' this.name);
}
function newNew(c,...res){
//使用构造函数原型对象创建空对象,继承原型方法
var obj=Object.create(c.prototype);
// 调用父类,初始化属性
var result=c.apply(obj,res);
// 执行构造函数,若是返回一个新对象,new就会返回这个新对象,否则返回obj
return typeof result==='object'?result:obj;
}
var child=new Parent('星辰',18)
child.say()