我创建了一个带有对象文字的对象,然后使用Object.create(car)
创建了另一个对象。
var car = {
init: function(sound) {
this.sound = sound
return this
},
makeSound: function() {
console.log(this.sound)
}}
var aventador = Object.create(car).init("whatever")
aventador.makeSound()
我想知道的是,当我在this
函数中返回init
时,我可以使用这样的代码:
var aventador = Object.create(car).init("Whatever")
aventador.makeSound()
及其控制台记录无论
但是当我在this
函数中不返回init
时,它会显示 undefined
当我做类似以下的事情时:
var aventador = Object.create(car)
aventador.init("Whatever")
aventador.makeSound()
即使不在this
函数中返回init
,它也能正常工作。
请详细说明发生了什么?
答案 0 :(得分:2)
这些函数是对象的属性。
当您返回this
并使用该返回值时,您将获得该对象。然后,您可以在该对象上调用另一个函数。
如果您没有return
声明,则会获得undefined
。 undefined
不是该对象,函数不是undefined
的属性。
答案 1 :(得分:0)
检查一下,上面的语句有2个部分,一个名为 aventador 的对象变量,它被赋予语句Object.create(car).init("whatever")
。在您的初始代码中,此语句将 this 作为对象上下文返回。因此 aventador 将获得一个对象实例,它将调用 makeSound 方法。
在第二种方法中,您实际上是使用语句var aventador = Object.create(car)
创建父对象。这将自动创建一个类型为汽车的对象,而aventador则有一个汽车实例。所以aventador可以用来调用 init 和 makeSound 方法。
答案 2 :(得分:0)
函数的默认返回值始终未定义。在您的情况下,如果init()不返回此,则返回undefined。显然,当您访问带有undefined的内容时,总会抛出错误。
希望能回答你的疑问