Javascript 返回时代码的行为不同';这';在函数中
我创建了一个具有对象文字的对象,然后使用Javascript 返回时代码的行为不同';这';在函数中,javascript,oop,return,prototype,this,Javascript,Oop,Return,Prototype,This,我创建了一个具有对象文字的对象,然后使用object.create(car)创建了另一个对象 我想知道的是,当我在init函数中返回this时,我可以这样使用代码: var aventador=Object.create(car.init)(“无论什么”) aventador.makeSound()和it控制台记录任何内容 但是当我在init函数中不返回this时,它会显示未定义 当我做以下事情时: var aventador=Object.create(汽车) aventador.init(“
object.create(car)
创建了另一个对象
我想知道的是,当我在init
函数中返回this
时,我可以这样使用代码:var aventador=Object.create(car.init)(“无论什么”)
aventador.makeSound()
和it控制台记录任何内容
但是当我在init
函数中不返回this
时,它会显示未定义当我做以下事情时:
var aventador=Object.create(汽车)
aventador.init(“无论什么”)
aventador.makeSound()
即使在init
函数中不返回this
也可以工作
请详细解释发生了什么?函数是对象的属性 当您返回this并使用该返回值时,您将得到该对象。然后可以对该对象调用另一个函数
当您没有
return
语句时,会得到未定义的<代码>未定义的
不是该对象,函数不是未定义的
的属性函数是对象的属性
当您返回this并使用该返回值时,您将得到该对象。然后可以对该对象调用另一个函数
当您没有
return
语句时,会得到未定义的undefined
不是该对象,函数也不是未定义的undefined
的属性检查此项,上面的语句有两个部分,一个名为Aventator的对象变量,它与语句object.create(car).init(“无论什么”)
一起分配。在初始代码中,此语句返回this作为对象上下文。因此,aventador将获得一个对象实例,它将调用makeSound方法。
在第二种方法中,您实际使用语句var aventador=object.create(car)
创建父对象。这将自动创建一个car类型的对象,aventador拥有一个car实例。因此,aventador可用于使用对象调用init和makeSound方法。检查这一点,上面的语句有两部分,一个名为aventador的对象变量被分配给语句object.create(car).init(“任意”)
。在初始代码中,此语句返回this作为对象上下文。因此,aventador将获得一个对象实例,它将调用makeSound方法。
在第二种方法中,您实际使用语句var aventador=object.create(car)
创建父对象。这将自动创建一个car类型的对象,aventador拥有一个car实例。因此,aventador可用于使用对象调用init和makeSound方法。函数的默认返回值始终未定义。在您的例子中,如果init()不返回此,则返回未定义。显然,当您访问未定义的内容时,总是抛出一个错误
希望能解答您的疑问函数的默认返回值始终未定义。在您的例子中,如果init()不返回此,则返回未定义。显然,当您访问未定义的内容时,总是抛出一个错误
希望这能回答您的疑问嗯,您正在将.init(…)
调用的返回值分配给aventador
。那么你还期望发生什么呢?我的意思是我可以执行var aventador=Object.create(car).init(“Whatever”)
然后调用方法aventador.makeSound()
,它会给出结果,但是当我在init(…)
函数中不返回this
时,我会得到一个未定义的操作,与上面的操作相同。。。这是为什么?显然是因为init
在不返回任何其他内容时返回undefined
?呃,您正在为.init(…)
调用aventador
分配返回值。那么你还期望发生什么呢?我的意思是我可以执行var aventador=Object.create(car).init(“Whatever”)
然后调用方法aventador.makeSound()
,它会给出结果,但是当我在init(…)
函数中不返回this
时,我会得到一个未定义的操作,与上面的操作相同。。。为什么会这样?显然是因为init
在不返回任何其他内容的情况下返回undefined
?
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()