gpt4 book ai didi

javascript - 对象、构造函数和方法之间的关系

转载 作者:行者123 更新时间:2023-11-28 16:32:37 25 4
gpt4 key购买 nike

这是 John Resig 的《学习高级 JavaScript》中的#33。 http://ejohn.org/apps/learn/#33希望您能提供尽可能多的帮助。

1) 从技术上讲,是ninja.changeName("Bob")“调用”Ninja 函数,还是立即转到this.changeName(name);

2) 一旦调用ninja.changeName("Bob"),函数Ninja(name)内部处理事件发生的顺序是什么?

3) this.changeName ( name); 的目的/功能到底是什么

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

this.changeName( name );
}

var ninja = new Ninja("John");
assert( ninja.name == "John", "The name has been set on initialization" );

ninja.changeName("Bob");
assert( ninja.name == "Bob", "The name was successfully changed." );

最佳答案

1) technically speaking, is ninja.changeName("Bob") "calling" the function Ninja, or does it go immediately to this.changeName(name);

函数Ninja只能使用语法Ninja(..)调用。语法 new Ninja(...) 并不完全调用该函数,而是将其用作新对象的构造函数。语法 ninja.changeName("Bob") 通过其 调用附加到 ninja 对象的 changeName 属性的匿名函数Ninja 构造函数。 “从技术上讲”,ninja.changeName("Bob")Ninja 函数关系不大。一旦创建了 ninja 对象,ninja.changeNameNinja 之间就没有任何关系了。

回到你的问题:都不是。它不会“调用”函数 Ninja,也不会转到 this.changeName(name)。它只是调用函数 ninja.changeName,这是一个常规的匿名函数,由我们的对象 ninja 的属性引用。

2) Once ninja.changeName("Bob") is invoked, what is the order in which the processing events take place inside function Ninja(name)?

如上所述,两者之间没有关系。执行 ninja.changeName("Bob")ninja.changeName 引用的匿名函数进行调用ninja.changeName 和匿名函数 function(name) { this.name=name; 之间的关联} 已由构造函数 Ninja 设置,但这是它们之间的唯一关系。

3) what exactly is the purpose/function of this.changeName ( name);

在构造函数中调用函数 changeName 来表明可以在构造函数内部调用方法。您可以为对象创建 setter,然后在构造函数中使用这些 setter 来初始化对象的属性。这个例子是说教性的;在现实世界中,setter 可能非常复杂,您必须使用它们来初始化对象。此外,如果不使用 setter,那么创建它有什么意义,例如:

function Ninja(constructorArg) {
this.changeName = function(setterArg){
this.name = setterArg;
};
this.name = constructorArg; // I'm not using the setter I've just written
}

关于javascript - 对象、构造函数和方法之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5335876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com