1
0
Fork 0

Freezing class object after creation

closure/master
Mike Gerwitz 2010-11-15 23:22:24 -05:00
parent 0b4ec19911
commit 0e232b4a2c
2 changed files with 29 additions and 2 deletions

View File

@ -22,12 +22,24 @@
* @package core * @package core
*/ */
// whether getters/setters are supported /**
* Whether getters/setters are supported
* @var {boolean}
*/
var getset = ( Object.prototype.__defineGetter__ === undefined ) var getset = ( Object.prototype.__defineGetter__ === undefined )
? false ? false
: true : true
; ;
/**
* Whether the Object.freeze() method is available
* @var {boolean}
*/
var can_freeze = ( Object.seal === undefined )
? false
: true
;
/** /**
* Creates a class, inheriting either from the provided base class or the * Creates a class, inheriting either from the provided base class or the
@ -133,6 +145,13 @@ var extend = ( function( extending )
new_class.prototype = prototype; new_class.prototype = prototype;
new_class.constructor = new_class; new_class.constructor = new_class;
// lock down the new class (if supported) to ensure that we can't add
// members at runtime
if ( can_freeze )
{
Object.freeze( new_class );
}
// we're done with the extension process // we're done with the extension process
extending = false; extending = false;

View File

@ -34,7 +34,10 @@ assert.ok(
); );
var Foo = Class.extend(); var Foo = Class.extend(
{
value: 'foo',
});
assert.ok( assert.ok(
@ -42,3 +45,8 @@ assert.ok(
"Extend method creates a new object" "Extend method creates a new object"
); );
assert.equal(
Object.isFrozen( Foo ),
true,
"Generated class should be frozen"
);