On 17.02.2011 11:22, Brendan Eich wrote:
On Feb 17, 2011, at 12:17 AM, Dmitry A. Soshnikov wrote:

Very strange behavior. What's the rationale? To avoid a shadowing? To avoid 
typo-errors -- i.e. if a user uses assignment it may be occasionally and if he 
uses Object.defineProperty -- he really wants to do it? Looks inconsistently. 
Assignment always affected an own property (only if the property isn't an 
accessor, then of course it affects the parent object).
No, assignment that would shadow a readonly prototype-property in ES1-3 was a 
silent failure. See 8.6.2.3 [[CanPut]] and 8.6.2.2 [[Put]].


Hm, really. Never thought -- probably because there were no use cases in ES3 for me. Checked in ES3:

var o = {__proto__: Object};
o.prototype = 10;
console.log(o.prototype); // still Object.prototype

Thanks, it was new for me.

Dmitry.

/be


Dmitry.

On 17.02.2011 5:02, 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

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

Reply via email to