This behaviour seems to result in undesirable behaviour in conjunction with 
object literals:

Object.defineProperty(Object.prototype, "foo", {value:"bar"});

"use strict"; var someObject = {foo:"wibble"}

Will now throw.

--Oliver

On Feb 16, 2011, at 6:02 PM, Allen Wirfs-Brock wrote:

> They can be over-ridden by Object.defineOwnProperty.  they cannot be 
> over-ridden by assignment.  See ES5 [[CanPut]] specification 8.12.4. step 8.b
> 
> On Feb 16, 2011, at 5:32 PM, Irakli Gozalishvili wrote:
> 
>> Thanks for the reply Allen,
>> 
>> I was under the impression that inherited properties can be overridden, 
>> regardless of their write-ability on the __proto__. 
>> 
>> Also as far as I understand freeze will make properties including 
>> constructor non-confugurable, will I still be able  to override such 
>> properties using Object.defineProperty ?
>> 
>> Also this was simplified example and it's not really possible to do the 
>> freeze after. Will try `Object.defineProprety` though.
>> 
>> Thanks
>> --
>> Irakli Gozalishvili
>> Web: http://www.jeditoolkit.com/
>> Address: 29 Rue Saint-Georges, 75009 Paris, France
>> 
>> 
>> On Thu, Feb 17, 2011 at 02:21, Allen Wirfs-Brock <[email protected]> 
>> wrote:
>> The error looks correct to me. By freezing Type.proto you make all its own 
>> properties "read only".  One of those is the constructor that is 
>> automatically created on every func.prototype object.  When you assign to 
>> object.constructor you are trying to over-ride an inherited read-onoy 
>> property.  ECMAScript has never allowed this.  You can say:
>>       Object.defineProperty(object,"constructor",{value: function Foo() {}, 
>> /* any other attributes you want to set */});
>> to over-ride the inherited constructor property.
>> Or you can restructure you code so you do the freeze after you do the 
>> assignment.
>> 
>> On Feb 16, 2011, at 5:09 PM, Irakli Gozalishvili wrote:
>> 
>>> Hi,
>>> 
>>> I've run into one issue and even after reading ES5 specs several times it's 
>>> not clear to me what should be an expected behavior:
>>> 
>>> Currently on Firefox nightly following code:
>>> 
>>> (function() {
>>> "use strict";
>>> 
>>> function Type() {}
>>> Object.freeze(Type.prototype);
>>> var object = Object.create(Type.prototype);
>>> object.constructor = function Foo() {};
>>> 
>>> return object
>>> })();
>>> 
>>> throws TypeError: object.constructor is read-only
>>> while on chrome 
>>> 
>>> it returns object with constructor Foo
>>> 
>>> I would like to know what is an expected behavior to fill a bug to an 
>>> appropriate project.
>>> 
>>> 
>>> Thanks!
>>> --
>>> Irakli Gozalishvili
>>> Web: http://www.jeditoolkit.com/
>>> Address: 29 Rue Saint-Georges, 75009 Paris, France
>>> _______________________________________________
>>> es-discuss mailing list
>>> [email protected]
>>> https://mail.mozilla.org/listinfo/es-discuss
>> 
>> 
> 
> _______________________________________________
> es-discuss mailing list
> [email protected]
> https://mail.mozilla.org/listinfo/es-discuss

_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to