函数对象如何适应 JavaScript 中对象的定义?

How do function-objects fit in the definition of objects in JavaScript?

我听说对象是属性和方法的集合。那么如果一个函数是一个对象,那么函数对象如何符合JavaScript中对象的定义呢? 我正在尝试制作一个具有属性和函数的函数示例,但我没有成功。

 function myperson(){
    this.name= "Bruno";
    personAbility = function(){document.write(1+1);};
}

document.write(myperson.name);

我做错了什么?你能帮我么。非常感谢!

你做得对,你只需要实例化你的 myperson 对象。您可以通过编写 var myPerson = new myperson() 来完成此操作。然后,console.log(myPerson) 应该显示: myperson {name: "Bruno"}

要配合您的 document.write 示例,您可以 document.write(myPerson.name).

一旦您将函数视为构造函数,this 关键字将可用,这意味着您必须使用 new 关键字创建一个新实例:

function myperson(){
    this.name= "Bruno";
    personAbility = function(){document.write(1+1);};
}

var person = new myperson();
document.write(person.name);

您没有在代码中创建 myperson 的实例。

正如你所说,函数是对象。是的,函数是对象,它们也有属性。当您说 myperson.name 时,您实际上是在访问函数的名称字段。

因为它是一个函数并且是 named function,函数的名称是 myperson 您为该函数声明的,它由 Javascript引擎。

此外,函数内部的 this 指向 window 对象,因为您没有将函数作为构造函数调用或绑定到任何对象。所以只调用该函数不会设置 myperson.name 属性,您需要使用 new 运算符,如 new myperson 并创建一个对象,该对象将具有 属性 "name" 您要访问的内容。


function myperson() {
    this.name= "Bruno";
    this.personAbility = function(){document.write(1+1);};
}

var per = new myperson();
document.write(per.otherName);
//call the personAbility method like below
per.personAbility();

更多关于 this 用法的信息。