请问如何理解JavaScript中函数是也是一种特殊的对象?

我们可以在函数上定义属性和方法(通过属性访问器),那么我可以把函数理解成一个可执行(通过圆括号调用foo())的对象吗?也就是功能比对象更强大一点

function foo () {}
foo.a = "abc"
console.log(foo.a) // 1
foo.bar = function(){
    console.log(this.a) // 1
}

那么对象可以通过添加某个属性实行执行功能吗?

阅读 2.3k
2 个回答
  1. 构造函数通常是把属性写在其原型上,方便子类或实例共享,当然,有些属性会直接作为构造函数自身的属性,方便外部调用,类似Java的静态方法,但是这类属性不能被子类或实例直接继承;
  2. 调用对象的属性时确实可以通过 this 关键字访问对象自身,函数也是对象,故函数也有此性质,但不代表其方法就能访问其函数体内的变量;
  3. 函数是对象的子集;
  4. 尽我所知,不可以,至少要给个函数体,而创建函数体貌似绕不开创建函数这一步。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题