Skip to content

Instantly share code, notes, and snippets.

@koyta
Created May 25, 2017 10:50
Show Gist options
  • Save koyta/c967152dc2dd690e5916ea0598ac308a to your computer and use it in GitHub Desktop.
Save koyta/c967152dc2dd690e5916ea0598ac308a to your computer and use it in GitHub Desktop.
Конфигурируемые свойства

Без необходимости проверки hasOwnProperty с помощью Object.keys (часто предпочтительнее):

for ( const key of Object.keys( obj ) )
{
	console.log( key, obj[key] );
}

Конфигурируемые свойства

data accessor
configurable: boolean = false
enumerable: boolean = false
writeble: boolean = false get: () => any
value: any = undefined set: ( value: any ) => void
const bob2 = {
	age: 20,
};

Object.defineProperty(
	bob2,
	'name',
	{
		value: 'Bob',
	}
);

Object.defineProperty(
	bob2,
	'age',
	{
		configurable: true,
		enumerable: false,
		value: 21,
	}
);

Object.defineProperty(
	bob2,
	'fullName',
	{
		configurable: true,
		enumerable: true,
		get: function ()
		{
			return `${this.firstName} ${this.lastName}`
		},
		set: function ( value )
		{
			const parts = value.split( ' ' );
			
			this.firstName = parts[0];
			this.lastName = parts[1];
		}
	}
);


const bob3 = {
	firstName: 'Bob',
	lastName: 'Smith',
};

Object.defineProperties(
	bob3,
	{
		age: {
			configurable: true,
			enumerable: true,
			writable: true,
			value: 21,
		},
		gender: {
			enumerable: true,
			value: 'male',
		},
		fullName: {
			configurable: true,
			enumerable: true,
			get: function ()
			{
				return `${this.firstName} ${this.lastName}`
			},
			set: function ( value )
			{
				const parts = value.split( ' ' );
				
				this.firstName = parts[0];
				this.lastName = parts[1];
			}
		}
	}
);

const bob4 = Object.create(
	Object.prototype,
	{
		firstName: {
			enumerable: true,
			writable: true,
			value: 'Bob',
		},
		gender: {
			enumerable: true,
			value: 'male',
		},
	}
);

const bob5 = {
	firstName: 'Boba',
	lastName: 'Fett',
	// ES5
	get fullName()
	{
		return `${this.firstName} ${this.lastName}`
	},
	set fullName( value )
	{
		const parts = value.split( ' ' );
		
		this.firstName = parts[0];
		this.lastName = parts[1];
	},
	// ES2015
	say( message )
	{
		console.log( `${this.fullName}: ${message}` );
	},
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment