我正在学习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);
我们非常感谢您提供进一步的知识和了解。谢谢。
答案 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方法,因此您可以调用Person
。 new 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());