功能的分配操作符

时间:2012-06-19 07:30:17

标签: javascript

我在理解在处理方法,函数等时使用的赋值运算符时遇到了一些麻烦。以下是w3学校中用于定义对象的示例

function person(firstname,lastname,age,eyecolor){
this.firstname=firstname;
this.eyecolor=eyecolor;

this.newlastname=newlastname;
}

这是实际的功能(放在其他地方)

function newlastname(new_lastname){
this.lastname=new_lastname;
}

在整个javascript中,这对我来说非常奇怪,你说

object.methodname = somefunctionname

有什么想法可以帮我概念化吗?

3 个答案:

答案 0 :(得分:2)

您问题中的代码实际上与此相同:

function person(firstname, lastname, age, eyecolor) {
    this.firstname = firstname;
    this.eyecolor = eyecolor;

    //anonymous function assigned to newlastname property
    this.newlastname = function(new_lastname) {
        this.lastname = new_lastname;
    };
}

person是构造函数(您可以使用new运算符调用它来创建新实例)。 person的每个实例都有三个属性,firstnameeyecolornewlastname

newlastname属性是方法,因为它的值是一个函数。当您调用该方法时,调用它的person实例将获得lastname属性。

例如:

var me = new person("James", "Allardice", 22, "Brown");
me.lastname; //undefined
me.newlastname("Something");
me.lastname; //Something

这是可能的,因为在JavaScript中,函数是对象。

答案 1 :(得分:1)

此语言功能称为First-class functions。维基百科的文章非常全面。

答案 2 :(得分:1)

这是关于javascript的很酷的事情。函数是第一类对象,这意味着与其他非函数式编程语言不同,您可以将它们作为参数传递给其他函数,从函数返回它们(如在您的示例中)将它们附加到像普通属性这样的对象。

这使得编程范例如(对于Web)如此重要的异步函数调用(回调)。