1

我读过一个对象是属性和方法的集合。那么如果一个函数是一个对象,那么函数对象如何适应 JavaScript 中的对象定义呢?我正在尝试制作一个具有属性和函数的函数示例,但我取得了任何成功。

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

document.write(myperson.name);

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

4

3 回答 3

2

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

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

因为它是一个函数并且它被命名为 function,所以函数的名称是你为函数声明的myperson,这由 Javascript 引擎处理。

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


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();

有关用法的更多信息。

于 2015-10-07T20:23:18.567 回答
1

你做对了,你只需要实例化你的 myperson 对象。你可以通过写来做到这一点var myPerson = new myperson()。然后,console.log(myPerson)应该显示: myperson {name: "Bruno"}

为了配合您的document.write示例,您可以执行document.write(myPerson.name).

于 2015-10-07T20:10:05.363 回答
1

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

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

var person = new myperson();
document.write(person.name);
于 2015-10-07T20:12:40.960 回答