当我设法在原型对象中定义一个函数时,但是当我在道具上使用foreach循环时,我发现这个方法也是我的道具之一。
我想知道我是否可以定义像toString()这样的方法吗?
hasOwnProperty()如果在循环内部不是我的选项,因为循环在包内。
这是我的代码。
function Person (personProps) {
Object.assign(this, {...personProps});
console.log(this);
}
Person.prototype.sayHay = () => {
console.log("hay");
}
const createPerson = (personProps) => {
let x = new Person(personProps);
x.sayHay();
return x;
};
export default createPerson;
感谢您的帮助。
答案 0 :(得分:1)
您可以在Person原型上定义属性,如此 -
function Person(personProps) {
Object.assign(this, { ...personProps});
}
Object.defineProperty(Person.prototype, "sayHay", {
value: function() {
console.log("hay");
},
/*
You can make `enumerable` property below false,
if you don't want it to be shown while
looping over properties
*/
enumerable: true
});
const createPerson = (personProps) => {
let x = new Person(personProps);
return x;
};
let person = createPerson({
a: 1
})
person.sayHay();
for (p in person) {
console.log(p);
}
这样,每次创建对象时都不必定义sayHay
属性。
答案 1 :(得分:0)
您可以使用class
class Person {
constructor(personProps) {
Object.assign(this, { ...personProps});
}
sayHay() {
console.log("hay");
}
}
const createPerson = (personProps) => {
let x = new Person(personProps);
x.sayHay();
return x;
};
let person = createPerson({
name: 'John'
});
for (prop in person) {
console.log(prop);
}