اشیاء در JavaScript
در JavaScript، هر چیزی می تواند یک شیء باشد: یک رشته، یک عدد، یک آرایه، یک تابع و ...
علاوه بر این، در JavaScript قابلیت تعریف اشیاد نیز وجود دارد.
اشیاء (Object) در JavaScript
در JavaScript چندین شیء توکار (built-in) مانند: رشته، تاریخ، آرایه و ... وجود دارد.
یک شیء، تنها یک نوع خاص داده است و می تواند شامل property و method هایی باشد.
دسترسی به خصوصیاتِ (property) یک شیء
اشیاء، به متغیرهای خاصی دسترسی دارند که به آنها property می گویند. (مقادیر وابسته به یک شیء)
نحوه دسترسی به یک property:
در مثال زیر، برای پیدا کردن طول رشته، از خصوصیت length استفاده شده است:
var x=message.length;
مقدار x، بعد از اجرای کد بالا:
دسترسی به متدهایِ (Method) یک شیء
Method در واقع عملیاتی است که روی یک شیء اجرا می شود.
نحوه ی فراخوانی یک Method:
در مثال زیر، با استفاده از متد ()toUpperCase حروف رشته "message" حروف بزرگ تبدیل شده:
var x=message.toUpperCase();
مقدار x، بعد از اجرای کد بالا:
ایجاد اشیاد در JavaScript
در JavaScript، قابلیت تعریف اشیاد، وجود دارد.
برای ایجاد یک شیء دو روش مختلف وجود دارد:
- تعریف و ایجاد یک نمونه مستقیم از شیء
- تعریف شیء با استفاده از یک تابع به عنوان سازنده (Constractor) و سپس ایجاد یک نمونه جدید از شی
1- تعریف و ایجاد یک نمونه مستقیم از شیء
در مثال زیر، یک نمونه مستقیم از یک شیء ایجاد شده و سپس چهار property به آن اضافه شده است:
مثال (اشیاء در JavaScript)
person.firstname="John";
person.lastname="Doe";
person.age=50;
person.eyecolor="blue";
کد بالا را می توان به صورت زیر نیز نوشت:
مثال (اشیاء در JavaScript)
2- تعریف شیء با استفاده از یک تابع به عنوان سازنده (Constractor) و سپس ایجاد نمونه
در مثال زیر، از یک تابع به عنوان سازنده برای ساخت شیء، استفاده شده است:
مثال (اشیاء در JavaScript)
{
this.firstname=firstname;
this.lastname=lastname;
this.age=age;
this.eyecolor=eyecolor;
}
کلمه کلیدی "this" در مثال بالا، به شیء ای که در دست است اشاره دارد.
ایجاد نمونه از یک شیء
زمانی که سازنده ی شیء وجود داشته باشد، برای ایجاد نمونه، مانند زیر عمل نمایید:
var myMother=new person("Sally","Rally",48,"green");
اضافه کردن Property به اشیاء
این کار بسادگی دادن آن یک مقدار، به شی موجود است.
به فرض اینکه شیء person قبلاً وجود داشته باشد، می توانید propertyهای age ,lastname ,firstname و eyecolor را مانند زیر به آن اضافه کنید:
person.lastname="Doe";
person.age=30;
person.eyecolor="blue";
x=person.firstname;
مقدار x، بعد از اجرای کد بالا:
اضافه کردن متدها (Method) به اشیاء
متدها، توابعی هستند که به اشیاء ضمیمه شده اند.
تعریف متدهای یک شیء، داخل تابع سازنده (constructor) انجام می شود:
{
this.firstname=firstname;
this.lastname=lastname;
this.age=age;
this.eyecolor=eyecolor;
this.changeName=changeName;
function changeName(name)
{
this.lastname=name;
}
}
تابع ()changeName مقدار پارامتر ورودی name را به خصوصیت lastname اختصاص می دهد:
دسترسی به متد ()changeName
myMother.changeName("Doe");
JavaScript می داند که شیء personی که شما درباره آن صحبت می کنید کدام است، بنابراین در تابع سازنده، عبارت this با mymother جابه جا می شود.
کلاس ها در JavaScript
JavaScript یک زبان شیء گرا (object oriented) است، اما از کلاس ها استفاده نمی کند.
در JavaScript کلاس تعریف نمی شود و همچنین از یک کلاس شیء ای ساخته نمی شود (مانند بیشتر زبان های شیء گرا).
JavaScript براساس یک نمونه اولیه است (prototype based) و از کلاس های استفاده نمی کند.
دستور for...in در JavaScript
دستور for...in در JavaScript، داخل propertyهای یک شیء، حلقه می زند.
نحوه استفاده:
{
code to be executed
}
توجه: کد داخل حلقه for...in، برای تک تک propertyهای شیء، اجرا خواهد شد.
مثال: حلقه زدن داخل propertyهای شی person:
مثال (اشیاء در JavaScript)
for (x in person)
{
txt=txt + person[x];
}
- نوشته شده توسط امیر پهلوان صادق
- بازدید: 29750
دیدگاهها
سلام وقت بخیر و خسته نباشید
ببخشید اون قسمتی که تو سازنده نوشتین : this.firstname= firstname چرا از this استفاده شده
سلام.
در تابع سازنده، کلمه ی کلیدی this به شیء جدید ایجاد شده اشاره می کنه. بنابراین عبارت this.firstname= firstname، یعنی در شیء جدیدی که داریم ایجاد می کنیم، یک پروپرتی(متغیر) به نام firstname ایجاد کن و اون رو برابر با آرگومان firstname از این تابع قرار بده.
سلام و خسته نباشد
در کد زیر مییشه بگین changename به چه دردی می خوره؟اگه فرا خوانی تابعه یکم توضیح بدید:
function person(firstname,lastname,age,eyecolor)
{
this.firstname=firstname;
this.lastname=lastname;
this.age=age;
this.eyecolor=eyecolor;
this.changeName=changeName;
function changeName(name)
{
this.lastname=name;
}
}
سلام
همان طور که در مطلب بالا مطالعه فرمودید، در دنیای شیء گرایی، هر شیء می تواند دارای یک یا چند Property و همچنین یک یا چند Method باشد.
اما در اسکریبت مذکور ما قصد داشتیم تا با یک مثال بسیار ساده، نحوه ی استفاده از Method را توضیح دهیم، در واقع Method توابع مربوط به یک شیء هستند که یک کار بخصوص را انجام می دهند و بصورت زیر قابل صدا زدن هستند:objectName.methodName()
حرف شما صحیح و من این مطلب رو فهمیدم اما خط زیر دقیقا چه کاری انجام میده؟
this.changeName=changeName;
و ببخشید در باره اشیا یعنی هر متغییری یک شی است؟
و این نیز نوعی تعریف شی می باشد؟:
name=new Object()
سلام مجدد
برای اضافه کردن متدها در جاواسکریپت به یکی از دو روش زیر می توانیم عمل کنیم
روش اول:
function person(firstname,lastname,age,eyecolor)
{
this.firstname=firstname;
this.lastname=lastname;
this.age=age;
this.eyecolor=eyecolor;
this.changeName=function(name)
{
this.lastname=name;
}
}
روش دوم:
function person(firstname,lastname,age,eyecolor)
{
this.firstname=firstname;
this.lastname=lastname;
this.age=age;
this.eyecolor=eyecolor;
this.changeName=changeName;
function changeName(name)
{
this.lastname=name;
}
}
بنابراین همانطور که متوجه شدید، در جاوا اسکریبت برای اضافه کردن متد ما مجبور هستیم از کلمه کلیدی this و سپس آنچه در بالا دیدید استفاده کنیم. در واقع اینکه چرا طراحان جاوااسکریبت اینگونه عمل کرده اند را باید از خودشون سوال کنید...!
قسمت دوم سوالتون: بله در جاوااسکریبت هر متغیری که تعریف می کنید یک شیء هست. لطفا توجه فرمایید بعد از اینکه اشیاء را در جاوا اکسریبت تعریف کردیم، باید از آنها استفاده کنیم...! در واقع با ساخت یک نمونه از آنها می توانیم به Propertyها و Methodهای شیء مورد نظر دسترسی داشته باشیم. یعنی کدی که در انتهای سوالتون مشخص کردید، نحوه ی ساخت یک نمونه از یک شیء دلخواه را مشخص می کند:
name=new Object()
برام سخت بود؛ جی کوئری راه حل آسون تری ارائه نداده؟
راه حل برای چی؟
سلام خسته نباشید
توی این آموزش شما یک نمونه به اسم mymother از کلاس personایجاد کردید. و اونو مقدار دهی کردید.
من میخواسم بدونم آیا میشه واسه نمونه mymother دوبار مقداردهی انجام بدم
var myMother=new person(["Sally" ,"Rally",48,"gr een"],["Sara"," deo",20,"red"]) ;یه چیزی مثل کد بالا
ممنون میشم ک زودی جوابمو بدین
با سلام و تشکر.
وقتی یه شی رو تعریف میکنید میتونید توسط اون شیء به متدهای اون کلاس دسترسی داشته باشید. حتی میتونید مقادیر خصوصیات متغیر رو در صورت نیاز تغییر بدید.
کد بالا mymother رو دوباره از کلاس موردنظر میسازه.
سلام و خسته نباشید خدمت شما
من یک کدی نوشته ام که از فرد سه مقدار نام و سن و تلفن را میگیره توسط ابجکت
وقتی روی دکمه نمایش کلیک می کنم مقدار های وارد شده را متغیر تعریف نشده Undifiend میده در حالی که متغیرم سراسری هم هست اینم لینکش
http://codepen.io/prv/pen/YXOGEB
اینم کد مورد نظر، خدمت شما : codepen.io/sbaloot/pen/ZGMBdZ
پس بخاطر همین است که بهش میگن مدل شی گرایی