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() {
...
}
};