当我在函数

时间:2017-05-10 17:53:24

标签: javascript oop return prototype this

我创建了一个带有对象文字的对象,然后使用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,它也能正常工作。

请详细说明发生了什么?

3 个答案:

答案 0 :(得分:2)

这些函数是对象的属性。

当您返回this并使用该返回值时,您将获得该对象。然后,您可以在该对象上调用另一个函数。

如果您没有return声明,则会获得undefinedundefined不是该对象,函数不是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的内容时,总会抛出错误。

希望能回答你的疑问