普通函数和对象内部函数的区别是什么?

what is the difference between normal function and a function inside an object

本文关键字:区别 是什么 内部函数 对象 函数      更新时间:2023-09-26

JavaScript中普通函数和对象内部函数的区别是什么?哪一个是最好的,这两个是如何工作的?

我的意思是这样的:

var a={
    funct:function(){
        // ...
    }
}
a.funct();
function funct() {
    // ...
}
funct();

嗯,它们之间没有太大的区别。

通常将附属于对象的函数称为方法。公平地说,全局函数被附加到全局对象(窗口)上,所以它可以被认为是全局对象的一个方法(想想alert,实际上是window.alert)。

不是所有的函数都附属于对象,你可以像拥有局部变量一样拥有局部函数。

function f () {
  var x = 12;
  var log = function (value) { console.log(value); };
  log(x);
}

它们之间的一个重要区别是this的值,这是一个在调用函数时传递给函数的伪参数,无论它们是否是方法。如果函数链接到一个对象,this将在使用方法语法调用时指向相应的对象:

var myObject = {
   name: 'Joe',
   myFunc: function () { console.log(this.name); }
};
myObject.myFunc(); // will receive myObject as this and therefore will print "Joe" 

然而,一个"正常"的函数要么接收全局对象(window),要么接收未定义的,这取决于你是否使用严格模式(默认情况下你没有,所以this将指向window)。

function f () { console.log(this.constructor); }
f(); // function Window()

关于this值的另一个答案可以在这里找到(完全披露:我也是那个答案的作者)

我不认为有不同,所有的函数都在一个对象内,从根窗口对象开始。我通常在对象中使用函数,只是为了使我的代码更有组织,更易读,并使用'this'来访问当前的对象属性,这就是全部。

"对象内部的函数"称为"方法"。它的关键区别在于它可以使用this访问对象内部的其他属性。因此,它通常用于从对象中操作或检索数据。

相反,对象外部的函数通常被设计为在任何特定上下文之外独立工作。

正如评论者很快指出的那样,上面的内容相当简单。我怀疑这是否是一个关于this更深层次含义的扩展教程的合适论坛,或者如何调用具有替代上下文的函数,或者在对象内部拥有独立于该对象上下文的函数。