我从一个简单的对象开始:
var person = { name: 'Joe', age: 21 };
我想在没有使用hasOwnProperty的方法时向该对象添加方法。 因此,例如,让我们创建一个生日方法,只是增加人的年龄。
var birthday = function() { this.age++; };
如何将其添加到person对象,如果我说:
for(var i in person) {
console.log(i);
}
我会得到:
name: 'Joe'
age: 21
birthday: function() { ... }
但如果我说:
for(var i in person) {
if(person.hasOwnProperty(i)) {
console.log(i, person[i]);
}
}
我会得到:
name: 'Joe'
age: 21
答案 0 :(得分:4)
var person = { name: 'Joe', age: 21 };
Object.defineProperty(person, 'birthday', {
enumerable: false,
configurable: false,
writable: false,
value: function() { this.age++; }
});
function showPerson() {
for(var i in person) {
if(person.hasOwnProperty(i)) {
console.log(i, person[i]);
}
}
}
showPerson();
person.birthday();
showPerson();

如果迭代方法没有hasOwnProperty很重要, 那么以下想法可能有用......
var person = { name: 'Joe', age: 21 };
var extend = {
birthday: function () { this.age ++ }
}
var person = Object.assign(
Object.create(extend),
person);
function showPerson() {
for(var i in person) {
if(person.hasOwnProperty(i)) {
console.log(i, person[i]);
}
}
}
function showPersonFull() {
for(var i in person) {
console.log(i, person[i]);
}
}
showPerson();
person.birthday();
showPersonFull();

答案 1 :(得分:0)
将其添加为另一个属性。
person.birthday = function() { this.age++; };
var person = { name: 'Joe', age: 21 };
person.birthday = function() { this.age++; };
for(var i in person) {
console.log(i);
}
person.birthday();
console.log(person.age);
for(var i in person) {
if(person.hasOwnProperty(i)) {
console.log(i, person[i]);
}
}