-
Notifications
You must be signed in to change notification settings - Fork 3.3k
Open
Labels
Description
鉴于十三题可以说的东西很多,就先看了十四题,作为一个单身狗,new的对象都是一个小狗啊
// 实现一个new
var Dog = function(name) {
this.name = name
}
Dog.prototype.bark = function() {
console.log('wangwang')
}
Dog.prototype.sayName = function() {
console.log('my name is ' + this.name)
}
let sanmao = new Dog('三毛')
sanmao.sayName()
sanmao.bark()
// new 的作用
// 创建一个新对象obj
// 把obj的__proto__指向Dog.prototype 实现继承
// 执行构造函数,传递参数,改变this指向 Dog.call(obj, ...args)
// 最后把obj赋值给sanmao
var _new = function() {
let constructor = Array.prototype.shift.call(arguments)
let args = arguments
const obj = new Object()
obj.__proto__ = constructor.prototype
constructor.call(obj, ...args)
return obj
}
var simao = _new(Dog, 'simao')
simao.bark()
simao.sayName()
console.log(simao instanceof Dog) // true
machangzhi, atheist1, zwmmm, ChenZongHeng, yishuihan-001 and 50 moreqq635030106, NuoHui, ZhongQW, tingtingtingsss, dongyuanxin and 26 moreydydydq, AndyZjy, corzero, loriswang, WsilenceY and 5 moreLoonging, songsongQAQ and WsilenceYWsilenceY and SuperDravenduandabiao, chentianyuan, aatoe, XHFkindergarten, WsilenceY and 2 moreWsilenceY, caojikeai and daiwiyNathanHan1, aatoe, hbxtben, corzero, yelin2016 and 8 more