Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何创建对象_Javascript_Dom - Fatal编程技术网

Javascript 如何创建对象

Javascript 如何创建对象,javascript,dom,Javascript,Dom,我是js的新手。我正在努力理解如何正确使用“this”。我想创建一个具有行为的对象。创建对象时,将为此人提供名称和步长 我的问题是如何在函数中保存步骤的数量?如何在不丢失上下文的情况下正确执行此操作,因为my this始终关注全局对象。您可以使用函数(而不是箭头函数)或类。我添加了一个代码示例,说明如何使用函数创建对象 function Person(name) { this.name = name; this.step =1; this.stepIncrease = f

我是js的新手。我正在努力理解如何正确使用“this”。我想创建一个具有行为的对象。创建对象时,将为此人提供名称和步长


我的问题是如何在函数中保存步骤的数量?如何在不丢失上下文的情况下正确执行此操作,因为my this始终关注全局对象。

您可以使用函数(而不是箭头函数)或类。我添加了一个代码示例,说明如何使用函数创建对象

function Person(name) {
    this.name = name;
    this.step =1;
    this.stepIncrease = function() {
        this.step++;
    }
    this.summary = function () {
    return this.step;
    }
}
const person = new Person("john");

您需要创建一个函数来返回person的对象。然后,要创建新对象,可以使用
new
关键字并调用函数。这将动态创建一个对象,并将
This
指针指定给对象本身

有关
的注意事项:

  • 如果使用.call()、.apply()或.bind()调用函数,
    将是在调用/应用/绑定中传递的对象
  • 如果在对象上调用函数,例如obj.foo(),
    将是调用它的对象
  • 如果单独调用函数,
    foo()
    将是未定义的(严格模式)或全局对象(非严格模式)
职能人员(姓名,步骤=1){
返回{
名称
步
逐步递增:函数(){
这个.step++;
归还这个;
},
摘要:功能(){
console.log(本步骤);
}
}
}
const john=新人(“john”);
逐步增加;
console.log(约翰)

class Person {
  name = "";
  step = 1;
  
  stepIncrease() {
    this.step++;
  }
  
  summary() {
    console.log(this.step);
  }
}

const person1 = new Person();
for(let i = 0; i < 5; i++) {
  person1.stepIncrease();
}
person1.summary();
班级人员{
name=“”;
步骤=1;
逐步增加{
这个.step++;
}
摘要(){
console.log(本步骤);
}
}
const person1=新人();
for(设i=0;i<5;i++){
人1.逐步增加();
}
person1.summary();

如何调用这些方法?需要对象的“实例”。您应该创建一个函数,而不是一个对象文本。然后,您可以创建该对象的“实例”(使用
new
关键字),并且
this
将绑定到该特定实例。相关:和@ScottMarcus这里不需要类或实例(imo使用“类”在JS中是一个反模式,尽管ES6给出了具体的语法支持,但我接受这只是一个很多人都会质疑的观点)
person
已经是一个对象,在大多数其他语言中都会被视为“实例”——只需调用
person.summary()
person.stepIncrease()
等就可以了,如果这对OP不起作用,他们应该共享他们的代码。@RobinZigmond我不推荐使用类(我个人同意你的观点)。但是,我解释了这个问题(关于
这个
)因为能够将多次使用
Person
的数据彼此分离。仅调用对象文本上的方法无法获得这种行为,因为它表示单个实例。您需要能够创建不同的
Person
对象的单独实例。不需要
new
此处的
Person(“John”)
将与
new Person(“John”)
的工作方式相同,因为构造函数重写返回值,并且不使用
new
提供的
this
。是的,这是正确的。