最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

JavaScript: modify prototype of an object's variable? - Stack Overflow

programmeradmin9浏览0评论

Here is an object:

var obj = new function(){
    this.prop = {};
}

and I try to do something like:
obj.prop.prototype["new_attr"] = "some_value";

What I'd like to do, is permanently modify obj.prop to contain the new attributes. From what I understood, all "Objects" had the prototype, but JavaScript is telling me prop doesn't have prototype.

Maybe I'm taking the wrong approach (in trying to permanently modify prop), but I'd at least like to know why the code above doesn't work.

Here is an object:

var obj = new function(){
    this.prop = {};
}

and I try to do something like:
obj.prop.prototype["new_attr"] = "some_value";

What I'd like to do, is permanently modify obj.prop to contain the new attributes. From what I understood, all "Objects" had the prototype, but JavaScript is telling me prop doesn't have prototype.

Maybe I'm taking the wrong approach (in trying to permanently modify prop), but I'd at least like to know why the code above doesn't work.

Share Improve this question edited Dec 28, 2011 at 14:26 Tom van der Woerdt 30k7 gold badges74 silver badges105 bronze badges asked Sep 13, 2011 at 3:12 AzmisovAzmisov 7,3198 gold badges57 silver badges79 bronze badges
Add a ment  | 

3 Answers 3

Reset to default 6

Typically you access the prototype object from the constructor function, but you can get it from an object as well, but not using .prototype.

The unofficial way (not supported in all browsers) to get the prototype object of an object is with the __proto__ property. (I believe it is deprecated in the browsers that support(ed) it).

The official ECMAScript 5 way (also not supported in all browsers) to get the prototype object of an object is to use Object.getPrototypeOf().

In your case .prop is referencing an object literal, so you already know that the prototype is Object.prototype.

Object.getPrototypeOf( {} ) === Object.prototype;  // true

Note that it is almost always a bad idea to extend Object.prototype.


"Maybe I'm taking the wrong approach (in trying to permanently modify prop), but I'd at least like to know why the code above doesn't work."

If you're just trying to modify the object referenced by .prop, then simply do:

obj.prop.new_attr = "some_value";

You can acplish what you are trying to do but you need to add the prop object to the constructors prototype:

var Obj = function() {};

Obj.prototype.prop = { bar: 'bar value' };

var obj_1 = new Obj();

console.log(obj_1.prop.bar); //bar value

obj_1.prop.foo = 'foo value';

var obj_2 = new Obj();

console.log(obj_2.prop.foo); //foo value

Because the prop attribute is empty. Before you'll be able to modify object.prop, you need to initialize prop first to a default value.

See the following references: Extending JavaScript Objects and Classes
Introduction to Object-Oriented JavaScript
A re-introduction to JavaScript

HTH. Cheers.

发布评论

评论列表(0)

  1. 暂无评论