Javascript 如何向现有对象添加类似原型的属性?

Javascript 如何向现有对象添加类似原型的属性?,javascript,Javascript,我从一个简单的对象开始,比如: var person = { name: 'Joe', age: 21 }; 我想向该对象添加一个方法,但在使用hasOwnProperty时不显示该方法。 例如,让我们创建一个生日方法,它只增加人的年龄 var birthday = function() { this.age++; }; 如果我说: for(var i in person) { console.log(i); } for(var i in person) { if(person.h

我从一个简单的对象开始,比如:

var person = { name: 'Joe', age: 21 };
我想向该对象添加一个方法,但在使用hasOwnProperty时不显示该方法。 例如,让我们创建一个生日方法,它只增加人的年龄

var birthday = function() { this.age++; };
如果我说:

for(var i in person) {
  console.log(i);
}
for(var i in person) {
  if(person.hasOwnProperty(i)) {
    console.log(i, person[i]);
  }
}
我会得到:

name: 'Joe'
age: 21
birthday: function() { ... }
name: 'Joe'
age: 21
但如果我说:

for(var i in person) {
  console.log(i);
}
for(var i in person) {
  if(person.hasOwnProperty(i)) {
    console.log(i, person[i]);
  }
}
我会得到:

name: 'Joe'
age: 21
birthday: function() { ... }
name: 'Joe'
age: 21
var person={name:'Joe',年龄:21};
Object.defineProperty(人,“生日”{
可枚举:false,
可配置:false,
可写:false,
值:函数(){this.age++;}
});
函数showPerson(){
对于(var i本人){
如果(个人拥有自己的财产(i)){
console.log(i,person[i]);
}
}
}
表演者();
人。生日();

表演者()将其添加为另一个属性

person.birthday = function() { this.age++; };
var person={name:'Joe',年龄:21};
person.birth=function(){this.age++;};
对于(var i本人){
控制台日志(i);
}
人。生日();
控制台日志(个人、年龄);
对于(var i本人){
如果(个人拥有自己的财产(i)){
console.log(i,person[i]);
}

}
不要从一个简单的对象开始,而要从一个有原型的对象开始,你可以将你的
生日方法指定给它。你为什么要这样做?你的目标是什么?我怀疑您正在寻找不可枚举的属性,而不是继承的属性。这是我的实际问题。想想Lodash用它的链子做了什么。如果您使用{},则可以从中调用一些方法,但它们不会显示在使用hasOwnProperty的循环中。这就是我试图复制的功能。Lodash使用标准JS构造函数+原型模式创建实例。但您仍然没有解释为什么要复制此循环功能。通常,我们不希望方法(非数据成员)出现在任何不使用特殊反射方法的循环中。那么您的用例是什么呢?再次以Lodash为例,如果我想在person上使用一个.each()方法,它应该循环通过.name和.age,但是跳过.each,因为它实际上不是该对象的一个方法,而是我试图模拟的一个来自原型的助手方法。这并不是OP想要的。他希望
birthday
出现在一个普通的循环中。你知道有什么方法可以为旧浏览器(比如IE6)做到这一点吗?我知道这可能要求很多,我知道IE6在这一点上已经过时了,只是想知道。
你知道有什么方法可以为旧浏览器(例如IE6)做到这一点吗?
,你可以试试es5垫片。。如。