Javascript 作为对象和函数调用的函数

Javascript 作为对象和函数调用的函数,javascript,function,Javascript,Function,我正在读这篇文章,但有一个例子我不太明白 // A function being attached to an object at runtime. var myName = "the global object"; var sayHello = function() { console.log( "Hi! My name is " + this.myName ); }; var myObject = { myName: "Rebecca" }; var secondObject

我正在读这篇文章,但有一个例子我不太明白

// A function being attached to an object at runtime.
var myName = "the global object";
var sayHello = function() {
    console.log( "Hi! My name is " + this.myName );
};
var myObject = {
    myName: "Rebecca"
};
var secondObject = {
    myName: "Colin"
};

myObject.sayHello = sayHello;
secondObject.sayHello = sayHello;

sayHello();              // "Hi! My name is the global object"
myObject.sayHello();     // "Hi! My name is Rebecca"
secondObject.sayHello(); // "Hi! My name is Colin"
我完全理解,除了这两行:

myObject.sayHello = sayHello;
secondObject.sayHello = sayHello;
我们到底该怎么处理他们?我们为对象创建新的键,并声明它们的值将是函数sayHello,但我们省略了括号,以便不显式调用函数?我们为什么需要它们?如果我们省略它们,我们会得到同样的结果吗?它不会再次成为“运行时附加到对象的函数”吗

我们为对象创建新的键,并声明它们的值将是函数sayHello

但是为了不显式调用函数,我们省略了括号

对。如果调用了函数,那么将指定函数调用的返回值,而不是函数本身

如果我们忽略它们,我们不会得到同样的结果吗

如果省略这两行,那么
myObject.sayHello
将是
undefined
,当您尝试调用
undefined()
时,将出现错误

同:

var myObject = {
    myName: "Rebecca",
    sayHello: function() {
        ...
    }
};

发生的情况是,您将
myObject.sayHello
指向
sayHello
函数(并且省略括号,否则您将分配调用函数的结果)。每当您调用
sayHello
函数时,
this
将成为您调用
sayHello
的对象

因此,对于
myObject.sayHello
,此
将是
myObject


对于简单地调用
sayHello
,您实际上要做的是调用
window.sayHello
,因此
设置为
window

非常感谢!因此,如果我们之前没有向对象添加带有此函数的新键,则无法向对象调用函数?
call
apply
bind
提供了在对象上下文中调用函数的方法,而无需将其作为对象上的方法,但要将其作为方法调用,它必须是对象上属性的值。
var myObject = {
    myName: "Rebecca",
    sayHello: function() {
        ...
    }
};