这行Js代码到底在做什么?

时间:2013-08-28 20:05:23

标签: javascript object methods web properties

我正在学习javascript中的对象,我正在使用一个函数来构造一个对象并为其添加一个方法。很明显,有一种方法可以改变对象的firstName,但该行是什么 的 this.changeName = changeName;
到底呢?如果我删除它或将changeName函数名称更改为其他内容,则会发生错误并且不显示任何内容。删除这行代码也会导致错误,所以看起来代码运行是必不可少的,但我真的无法弄清楚它的作用。

<script>

function person(firstName, lastName, age){
    this.firstName=firstName;
    this.lastName=lastName;
    this.age=age;
    this.changeName=changeName;

    function changeName(name){
        this.firstName=name;
    }
}
me = new person("Hazem", "Khadash", 18);
me.changeName("Bashar");
document.write(me.firstName);

当我理解代码时,创建了我,将changeMe()函数作为方法调用,然后在屏幕上呈现person.lastName。

感谢。

5 个答案:

答案 0 :(得分:2)

您将changeName作为person的一部分进行访问。将其视为公开changeName

如果没有它,则不能me.changeName me.changeName person不再存在{{1}}范围之外。

答案 1 :(得分:1)

function person(firstName, lastName, age) {
    ...

    function changeName(name){
        this.firstName=name;
    }
}

创建一个仅在函数person内可用的函数。正如您所发现的那样,只有这样才会使me.changeName(…)无效,因为该功能无法在person之外访问。

this.changeName = changeName

可以在person函数之外访问该函数,以便稍后调用me.changeName

注意它是this.changeName = changeName,而不是this.changeName = changeName()。使用括号,它将调用函数并将其输出分配给this.changeName;如果没有括号,它会将引用分配给函数changeNamethis.changeName

你可以把它改成这个,它就等同于:

function person(firstName, lastName, age) {
    ...
    this.changeName = function(name){
        this.firstName=name;
    }
}

编写person“类”的最佳方式可能是这样的:

function person(firstName, lastName, age) {
    this.firstName = firstName;
    this.lastName = lastName;
    this.age = age;
}

person.prototype.changeName = function changeName(name){
    this.firstName = name;
};

答案 2 :(得分:1)

正如您可能已经在Javascript中听到的,一切都是对象。当你在功能人员中时,你也是“在对象”中的人。所以这指的是对象。在此函数中声明嵌套函数使其仅在函数的上下文中可见,而不是在其他任何位置。要使它可用于外部世界,您必须将其分配给对象字段,否则您无法从外部调用它。您可以将其视为类的方法(JS中没有真正的类) - 如果您熟悉面向对象的编程。

同样的事情是:

function person(firstName, lastName, age){
  this.firstName=firstName;
  this.lastName=lastName;
  this.age=age;
  this.changeName = function(name){
    this.firstName=name;
  }
}

在person实例的范围内调用此方法时。 “this”总是指那个特定的例子。

可以总结一下:

this.changeName = changeName; - &GT;将仍未定义的本地对象changeName分配给object-field changeName

function changeName(name) - &gt;声明本地对象changeName为函数。

记住 - 在JavaScript中,一切都是对象函数,变量,数组......

答案 3 :(得分:0)

在javascript函数中,可以将变量分配为数字或字符串。在此特定情况下,名为person的{​​{1}}属性被赋值为函数changeName。通过此分配,您可以通过此探测(changeName

调用changeName函数

答案 4 :(得分:0)

如果没有这行代码,您可以在范围内的中调用changeName(name)函数。但是使用该行代码,您可以从作用域的外部调用该函数,例如底部的行:me.changeName(“Bashar”)。