我正在创建一个对象中的一堆对象,我认为将构造函数作为一个对象属性来封装所有东西是个好主意。例如。
//surprisingly you can't do this it returns an error
// Uncaught TypeError: this.Dogs is not a constructor
let dogs={
keagon: new this.Dog("keagon","shih sue"),
spike: new this.Dog("spike","lab"),
Dog: function(name,breed){
this.name=name;
this.breed=breed;
}
}
//nor can you do this
let dogs2={
keagon: new dogs2.Dog("keagon","shih sue"),
spike: new dogs2.Dog("spike","lab"),
Dog: function(name,breed){
this.name=name;
this.breed=breed;
}
}
// this again returns an error
//Uncaught ReferenceError: dogs2 is not defined
//this leads me to believe you cant access objects within themselves
//without the this key word correct? If so, I find a that a bit surprising
//because you can call functions within themselves.
//I was able to encapsulate like I wanted, by storing the newly created
//objects as properties of their constructor, for example
function Dog(name,breed){
this.name=name;
this.breed=breed;
}
Dog.dogs={
keagon: new Dog("keagon","shih sue"),
spike: new Dog("spike","lab")
}
// Dog.dogs.keagon > outputs Dog {name: "keagon", breed: "shih sue"}
//keagon object is a object type of object and not of function so it also
//inherits all the Object methods
那么有没有办法放置构造函数和对象属性,如果没有这个原因你不能将构造函数放在对象中,但是你可以在它们的构造函数上存储对象并且这样做是个坏主意吗?创建对象并将它们存储在构造函数中以封装它们是不好的做法?是否有任何我不知道的问题?
答案 0 :(得分:0)
我认为你不能声明一个变量并在其构造中使用它本身。 你可以这样做
let dogs2={
Dog: function(name,breed){
this.name=name;
this.breed=breed;
}
}
和
dogs2.keagon= new dogs2.Dog("keagon","shih sue");
dogs2.spike= new dogs2.Dog("spike","lab");
这样你就可以得到你想要的结果。