使用JavaScript

时间:2018-09-28 00:59:50

标签: javascript

我正在学习JavaScript,但遇到了一个我不知道的问题。如果有人对此有答案,并且可以向我解释我哪里出错了,我将不胜感激。

我有2个函数,其中1个称为带参数(名称,petProp)的人。我设置petProp来查看第二个函数,该函数称为Pet,其参数为(name,species)。

然后我创建一个新的Person和一个新的Pet。

接下来,我创建一个将宠物分配给该人的功能。我希望能够为此添加新的人和新的宠物。

最后,我想编写一个以Person对象为参数的reportPets函数,并将此人的名字加冒号,然后以逗号分隔的宠物列表输出到控制台,并在每只宠物后的括号中加上宠物的种类。 / p>

我的问题是前三个功能并使它们正常工作。我可以得到一个console.log输出,其中有4个参数,我实际上只在寻找3个。这是代码,我希望这些问题有意义。

function Person(name, petProp) {
  this.name = name;
  this.petProp = Pet;
}

let myPerson = new Person("Mary");

function Pet(name, species) {
  this.name = name;
  this.species = species;
}

let myPet = new Pet("Fluffy", "Cat");

function assignPetToPerson(Pet, Person) {
  return this.myPet + " " + this.myPerson;
}

assignPetToPerson(myPet, myPerson);
console.log(myPerson, myPet);

我们非常感谢您提供进一步的知识和了解。谢谢。

3 个答案:

答案 0 :(得分:0)

您需要仔细校对,并将对象视为唯一的项,而不是类的成员。您可以随时添加属性。

您在“个人”功能中引用了不存在的对象Pet。您将参数petProp传递给您没有执行任何操作的相同函数。您只需忽略事物的宠物部分,直到您想将其添加到assignPetToPerson函数中即可。

创建功能然后创建对象可能有助于使事情保持清晰。

function Person(name) {
  this.name = name;
}

function Pet(name, species) {
  this.name = name;
  this.species = species;
}

function assignPetToPerson(Pet, Person) {
  Person.pet = Pet;
}

const myPet = new Pet("Fluffy", "Cat");
const myPerson = new Person("Mary");

assignPetToPerson(myPet, myPerson);

console.log(myPerson);

答案 1 :(得分:0)

我假设您想将diffing_function <- function(i) { d <- subset(df, df$category == i) R <- expand.grid(i1 = unique(d$id), i2 = unique(d$id)) R$category <- i R$x1 <- d$x[match(R$i1, d$id)] R$y1 <- d$y[match(R$i1, d$id)] R$x2 <- d$x[match(R$i2, d$id)] R$y2 <- d$y[match(R$i2, d$id)] R$xdiff <- R$x2 - R$x1 R$ydiff <- R$y2 - R$y1 return(R) } results_list <- lapply(unique(df$category), diffing_function) results_df <- do.call(rbind, results_list) 作为myPet的{​​{1}}?

这是(许多方式之一)如何实现这一目标:

petProp

为每个myPerson实例创建一个公共方法function Person(name) { this.name = name; this.setPet = function(pet) { this.petProp = pet; } } let myPerson = new Person("Mary"); function Pet(name, species) { this.name = name; this.species = species; } let myPet = new Pet("Fluffy", "Cat"); myPerson.setPet(myPet); console.log('myPerson:', myPerson); console.log('myPet:', myPet); 的代码是做什么的。通过调用setPet创建实例。

可以从实例中调用public方法,因此您可以调用Personnew Person()函数将根据myPerson.setPet(myPet)的值设置setPet

在这种情况下,

this.petProp是指实例本身。例如,如果您正在呼叫myPet,则this中的myPerson.setPet()是指this。您可以在设置宠物后直接访问setPet进行测试,该值将相同。

但是

您实际上不需要为此目的创建公共方法。您可以只做myPerson。这样的Javascript非常动态。但是,如果您来自面向对象的背景,那么您可能想知道这在Javascript中是可能的。

答案 2 :(得分:0)

function Person(name, petProp) {
  this.name = name;
  this.petProp = Pet;
}

var myPerson = new Person("Mary");

function Pet(name, species) {
  this.name = name;
  this.species = species;
}

var myPet = new Pet("Fluffy", "Cat");

function assignPetToPerson() {
  return this.myPerson.name + ' ' + this.myPet.name + ' ' + this.myPet.species
}


console.log(assignPetToPerson());