没有对象怎么办?那当然是 new
一个出来呗
那么
new
到底做了些什么骚操作,能满足你拥有对象的愿望呢?
首先,你想拥有一个女朋友。在你心里肯定有一个理想型,比如纯情女高
?御姐
?萝莉
......反正肯定不是这个-->
至少得是这个嘛
function Girl() {
this.name = "柳yan"
this.age = 18
this.fn = function () {
console.log("口齿伶俐~");
}
}
然后有了模板我们就可以 new
一个自己的出来啦!
怎么
new
?
- 我们想要一个对象,那么肯定得创造一个对象出来吧
- 这个对象暂时和我们的理想型没啥关系吧,所以我们要让她们建立关系
- 我们是不是还得让创造出来的对象有一些属性,柳yan,18,和她的能力(就是fn方法而已啦)
- 把这个有了实体内容的对象返回给我们,我们不就可以......嘿嘿嘿!
咳咳,回归正题,那么new
关键字到底干了些什么呢?
(1) 首先创建了一个空对象。
(2) 设置原型,将对象的原型设置为函数的prototype对象。
(3) 让函数的this指向这个对象,执行构造函数中的代码
(4) 判断函数的返回值类型,如果是值类型,则返回创建的对象,如果是引用类型,则返回这个引用类型的对象。
那么,我们能不能自己写一个类似的new关键字呢?行不行呀(xigou)
那肯定得行啊是吧!!!
function Girl(name,age) {
this.name = name
this.age = age
this.fn = function () {
console.log("口齿伶俐~");
}
}
function _new(fn,...args) {
// 1.创建一个新对象
let newObj = {}
// 2.将新对象和构造函数通过原型链连接
newObj.__proto__ = fn.prototype
// 3.将构造函数的this绑定到新对象上
const result = fn.apply(newObj,args)
// 4.根据返回值类型判断,如果是值类型返回newObj,如果是引用类型返回正常引用类型
return result instanceof Object ? result : newObj
}
const wzh = _new(Girl,"wzh","18")
console.log(wzh);
行啦,new
很好,也只不过在代码里YY了,堆屎山去吧!程(单
)序(身
)员(狗
)... ...