diff --git a/lib/class.js b/lib/class.js index ef67554..338c3ef 100644 --- a/lib/class.js +++ b/lib/class.js @@ -22,6 +22,12 @@ * @package core */ +// whether getters/setters are supported +var getset = ( Object.prototype.__defineGetter__ === undefined ) + ? false + : true +; + /** * Default class implementation @@ -52,8 +58,8 @@ var prop_copy = function( props, dest ) // care about methods - properties will simply have their values // overwritten) var pre = dest[ property ], - getter = props.__lookupGetter__( property ), - setter = props.__lookupSetter__( property ); + getter = ( ( getset ) ? props.__lookupGetter__( property ) : null ), + setter = ( ( getset ) ? props.__lookupSetter__( property ) : null ); // check for getter/setter overrides if ( getter || setter ) @@ -166,15 +172,26 @@ var attach_extend = function( func ) * * @return {Object} extended class */ - Object.defineProperty( func, 'extend', + var ext_method = function( props ) { - value: function( props ) - { - return extend( this, props ); - }, + return extend( this, props ); + }; - enumerable: false, - writable: false, - configurable: false, - } ); + // if defineProperty is unsupported, do it the old fashioned way (it's just + // less restrictive) + if ( Object.defineProperty === undefined ) + { + func.extend = ext_method; + } + else + { + Object.defineProperty( func, 'extend', + { + value: ext_method, + + enumerable: false, + writable: false, + configurable: false, + } ); + } } diff --git a/test/test-class-gettersetter.js b/test/test-class-gettersetter.js index 474309b..5d2d663 100644 --- a/test/test-class-gettersetter.js +++ b/test/test-class-gettersetter.js @@ -22,6 +22,12 @@ * @package test */ +// don't perform these tests if getters/setters are unsupported +if ( Object.prototype.__defineGetter__ === undefined ) +{ + return; +} + require( './common' ); var assert = require( 'assert' ),