function structure (name, age) {
this.name = name
this.age = age
}
// 给构造函数--prototype加上一个方法
structure.prototype.sayName = function () {
console.log(this.name, '调用打印');
return this.name
}
structure.one = 5
const person = new structure('张龙', 188)
// 打印构造函数
console.dir(structure);//ƒ structure(name, age)
// 打印new 创建的对象
console.log(person, 'new创建的对象');
console.log(person.sayName(), '调用构造函数原型链上的方法');
// 打印构造函数身上的属性值
console.log(structure.one, '造函数身上的属性值');//5
console.log(person.one, '构造函数new出来的对象-打印构造函数的身上的属性值');//undefined
控制台结果
补充__proto__指向上一级构造函数的prototype
//当一个属性调用方法或获取属性值时
//-如果自身没有就会在他的构造函数的prototype身上去找,如果还没有
// 就会去上一级的构造函数的prototype身上去找,
// 直到顶级对象Object,如果没有,属性返回undefined ,方法报错
给 构造函数return 一个 原始值
return 不生效
给 构造函数return 一个对象
得到return的对象
构造函数如果返回值为一个对象,那么这个返回值会被正常使用
new 关键字做了一下事情
创建一 空的 新对象
将对象与构建函数通过原型链连接起来
将构建函数中的this
绑定到新建的对象上
根据构建函数返回类型作判断,如果是原始值则被忽略,如果是返回对象,需要正常处理
-----------------------
明日手写new