روشهای اشیاء JavaScript ES5
- صفحه قبلی پروتوتایپهای شیء JS
- صفحه بعدی تعریف توابع JS
ECMAScript 5 (2009) بسیاری از روشهای جدید به JavaScript اضافه کرد.
مدیریت شیء
// شیء جدیدی با استفاده از شیء موجود به عنوان prototype ایجاد میکند Object.create() // ویژگیهای شیء را اضافه یا تغییر میدهد Object.defineProperty(object, property, descriptor) // ویژگیهای شیء را اضافه یا تغییر میدهد Object.defineProperties(object, descriptors) // به ویژگی دسترسی دارد Object.getOwnPropertyDescriptor(object, property) // به صورت آرایه همه ویژگیها را برمیگرداند Object.getOwnPropertyNames(object) // به prototype دسترسی دارد Object.getPrototypeOf(object) // به صورت آرایه ویژگیهای قابل شمارش را برمیگرداند Object.keys(object)
محافظت از شیء
// از اضافه کردن ویژگیها به شیء جلوگیری میکند Object.preventExtensions(object) // اگر ویژگیها میتوانند به شیء اضافه شوند، true برمیگرداند Object.isExtensible(object) // از تغییر ویژگیهای شیء (نه ارزشها) جلوگیری میکند Object.seal(object) // اگر شیء بسته شده باشد، true برمیگرداند Object.isSealed(object) // از تغییر هرگونه در شیء جلوگیری میکند Object.freeze(object) // اگر شیء منجمد شده باشد، true برمیگرداند Object.isFrozen(object)
تغییر ارزش ویژگی
نحوه نوشتن
Object.defineProperty(object, property, {value : value)
نمونه
مثال تغییر ارزش ویژگی:
const person = { firstName: "Bill", lastName : "Gates", language : "EN" }; // تغییر ویژگی Object.defineProperty(person, "language", {value : "NO"});
تغییر دادههای متغیر
ES5 مجاز است که دادههای متغیر زیر را تغییر دهیم:
writable : true // 属性值可更改 enumerable : true // 属性可枚举 configurable : true // 属性可重新配置
writable : false // 属性值不可更改 enumerable : false // 属性不可枚举 configurable : false // ویژگی قابل تنظیم مجدد نیست
ES5 اجازه میدهد getter و setter تغییر کنند:
// تعریف getter get: function() { return language } // تعریف setter set: function(value) { language = value }
این مثال ویژگی language را فقط خواندنی تنظیم میکند:
Object.defineProperty(person, "language", {writable:false});
این مثال ویژگی language را غیرقابل شمارش میکند:
Object.defineProperty(person, "language", {enumerable:false});
لیست تمام ویژگیها
این مثال تمام ویژگیهای شیء را لیست میکند:
نمونه
const person = { firstName: "Bill", lastName : "Gates", language : "EN" }; Object.defineProperty(person, "language", {enumerable:false}); Object.getOwnPropertyNames(person); // آرایهای از آرایهها را برمیگرداند
لیست ویژگیهای قابل شمارش
این مثال تنها ویژگیهای قابل شمارش شیء را لیست میکند:
نمونه
const person = { firstName: "Bill", lastName : "Gates", language : "EN" }; Object.defineProperty(person, "language", {enumerable:false}); Object.keys(person); // آرایهای از ویژگیهای قابل شمارش را برمیگرداند
افزودن ویژگی
این مثال ویژگی جدیدی به شیء اضافه میکند:
نمونه
// ایجاد شیء const person = { firstName: "Bill", lastName : "Gates", language : "EN" }; // اضافه کردن ویژگی Object.defineProperty(person, "year", {value:"2008"});
افزودن Getter و Setter
Object.defineProperty()
این روش همچنین میتواند برای اضافه کردن Getter و Setter استفاده شود:
نمونه
// ایجاد شیء const person = {firstName:"Bill", lastName:"Gates"}; // تعریف getter Object.defineProperty(person, "fullName", { get: function () {return this.firstName + " " + this.lastName;} });
یک نمونه شمارنده
// تعریف شیء const obj = {counter:0}; // تعریف setter Object.defineProperty(obj, "reset", { get : function () {this.counter = 0;} }); Object.defineProperty(obj, "increment", { get : function () {this.counter++;} }); Object.defineProperty(obj, "decrement", { get : function () {this.counter--;} }); Object.defineProperty(obj, "add", { set : function (value) {this.counter += value;} }); Object.defineProperty(obj, "subtract", { set : function (i) {this.counter -= i;} }); // عملیات شمارنده: obj.reset; obj.add = 5; obj.subtract = 1; obj.increment; obj.decrement;
- صفحه قبلی پروتوتایپهای شیء JS
- صفحه بعدی تعریف توابع JS