2
<script>
function person(firstname,lastname,age,eyecolor)
{
    this.firstname=firstname;
    this.lastname=lastname;
    this.age=age;
    this.eyecolor=eyecolor;

    this.changeName=changeName;

    function changeName(name)
    {
        this.lastname=name;
    }
}
myMother=new person("Sally","Rally",48,"green");
document.writeln(myMother.lastname + " is " + myMother.age + " years old.");

myMother.changeName("Doe");
document.writeln(myMother.lastname);
</script>

这里首先我定义了 changeName() 函数体并使用参数 [myMother.changeName("Doe");] 调用该函数。正如我之前所学的,当它被调用时它应该可以工作。

但这里为什么我需要这条线(this.changeName=changeName)。如果我删除它 document.writeln(myMother.lastname) 这个命令不起作用。我无法理解为什么会发生这种情况以及为什么使用此行 (this.changeName=changeName)...

请帮我找出问题所在。由于我是 JavaScript 的初学者,请告诉我如何在 JavaScript 中做得更好的过程或方法,或者我应该遵循哪种方法来使 myselt 成为更好的程序员。谢谢..

4

1 回答 1

1

为了能够使用点表示法(以便您可以myMother.changeName(name)代替changeName(myMother, name)),必须将函数设置为对象的属性。this.changeName = changeName将函数设置为正在创建的对象的属性。


更好的方法是将它设置在原型上一次,然后使它可用于从person构造函数创建的所有对象:

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

这样,我们不必在每次创建新对象时都重新创建函数。

于 2013-06-26T23:42:49.853 回答