Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 返回时代码的行为不同';这';在函数中_Javascript_Oop_Return_Prototype_This - Fatal编程技术网

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可用于使用对象调用initmakeSound方法。

检查这一点,上面的语句有两部分,一个名为aventador的对象变量被分配给语句
object.create(car).init(“任意”)
。在初始代码中,此语句返回this作为对象上下文。因此,aventador将获得一个对象实例,它将调用makeSound方法。
在第二种方法中,您实际使用语句
var aventador=object.create(car)
创建父对象。这将自动创建一个car类型的对象,aventador拥有一个car实例。因此,aventador可用于使用对象调用initmakeSound方法。

函数的默认返回值始终未定义。在您的例子中,如果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()