Javascript 对象、其构造函数及其方法之间的关系

Javascript 对象、其构造函数及其方法之间的关系,javascript,Javascript,这是John Resig的《学习高级JavaScript》中的第33篇。如果您能在这方面提供帮助,我将不胜感激 1) 从技术上讲,是ninja.changeName(“Bob”)“调用”函数ninja,还是立即转到this.changeName(name) 2) 调用ninja.changeName(“Bob”)后,函数ninja(name)中处理事件的顺序是什么 3) 此项变更的目的/功能是什么。变更名称(名称) 1) 它正在调用函数上的方法 2) 它只需通过setter更新自己的name属性

这是John Resig的《学习高级JavaScript》中的第33篇。如果您能在这方面提供帮助,我将不胜感激

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

2) 调用
ninja.changeName(“Bob”)
后,函数ninja(name)中处理事件的顺序是什么

3) 此项变更的目的/功能是什么。变更名称(名称)

1) 它正在调用函数上的方法

2) 它只需通过setter更新自己的
name
属性

3) 它是使用setter来更改属性。

1)它正在调用函数上的方法

2) 它只需通过setter更新自己的
name
属性

3) 这是使用setter来更改属性。

这是一个非常好的问题)

  • 在JS中,函数是对象,因此通过调用
    ninja.changeName(“Bob”)
    可以直接使用ninja的方法
    .changeName()

  • 如果调用了
    ninja.changeName
    ,则不会触发此方法之外的任何操作

  • this.changeName(名称)-是构造函数操作,它们仅在创建时应用于ninja对象(用属性名扩展新创建的对象)

看看

这是一个很好的问题)

  • 在JS中,函数是对象,因此通过调用
    ninja.changeName(“Bob”)
    可以直接使用ninja的方法
    .changeName()

  • 如果调用了
    ninja.changeName
    ,则不会触发此方法之外的任何操作

  • this.changeName(名称)-是构造函数操作,它们仅在创建时应用于ninja对象(用属性名扩展新创建的对象)

看看

1) 从技术上讲,是ninja.changeName(“Bob”)在“调用”函数ninja,还是会立即转到这个

它调用分配给使用
var Ninja=new Ninja(“John”)创建的Ninja实例的
changeName
属性的匿名函数

2) 调用ninja.changeName(“Bob”)后,函数ninja(name)中处理事件的顺序是什么

运行该函数中的单个语句

3) 此项变更的目的/功能是什么。变更名称(名称)

它接受一个参数,并将该参数的值赋给调用该方法的
Ninja
实例的
name
属性

1) 从技术上讲,是ninja.changeName(“Bob”)在“调用”函数ninja,还是会立即转到这个

它调用分配给使用
var Ninja=new Ninja(“John”)创建的Ninja实例的
changeName
属性的匿名函数

2) 调用ninja.changeName(“Bob”)后,函数ninja(name)中处理事件的顺序是什么

运行该函数中的单个语句

3) 此项变更的目的/功能是什么。变更名称(名称)

它接受一个参数,并将该参数的值赋给调用该方法的
Ninja
实例的
name
属性

1) 从技术上讲,它是 忍者。更改名称(“鲍勃”)“呼叫”忍者 功能忍者,还是去 立即更改此名称。更改名称(名称)

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

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

2) 曾经的忍者。改名(“Bob”)是 调用的顺序是什么 处理事件发生 内部功能忍者(姓名)

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

3) 到底是什么原因 此文件的目的/功能。更改名称( 姓名)

在构造函数中调用函数
changeName
,显示可以在构造函数中调用方法。可以为对象创建setter,然后在构造函数中使用这些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
}
1) 从技术上讲,它是 忍者。更改名称(“鲍勃”)“呼叫”忍者 功能忍者,还是去 立即更改此名称。更改名称(名称)

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