在原型内定义函数(如toString函数)

时间:2017-08-16 13:29:12

标签: javascript ecmascript-6

当我设法在原型对象中定义一个函数时,但是当我在道具上使用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;

感谢您的帮助。

2 个答案:

答案 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);
}