繁体   English   中英

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

[英]What is this line of Js code exactly doing?

我正在学习JavaScript中的对象,并且正在使用一个函数来构造对象并向其中添加方法。 很明显,有一种方法可以更改对象的名字,但是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呈现在屏幕上。

谢谢。

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

没有它,您将无法执行me.changeName因为me.changeName不再存在于person范围之外。

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 ; 不带括号,它将对功能changeName引用分配给this.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;
};

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

同样的事情是:

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

当您在人员实例的范围内调用此方法时。 “ this”总是指该特定实例。

一个可以总结为:

this.changeName = changeName; ->将仍未定义的本地对象changeName分配给对象字段changeName

函数changeName(name)->将本地对象changeName声明为一个函数。

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

在javascript中,可以将变量分配为数字或字符串。 在这种特殊情况下,将名为changeNameperson属性分配给功能changeName 通过此分配,您可以changeName此探测来调用changeName函数( me.changeName("Bashar");

没有那行代码,您可以在person对象的范围调用changeName(name)函数。 但是使用该行代码,您可以从范围外部调用该函数,例如朝底部的行:me.changeName(“ Bashar”)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM