💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۳ محمدرضا
متوجه نشدن متدها در جاوااسکریپت
امیر صالحی حل شده توسط امیر صالحی

با سلام

1. من آبجکت‌ها (property, method) در جاوااسکریپت را متوجه نمیشم، مثلا:

L.map('map').setView([35.6892, 51.3890], 13);

L: آبجکت leaflet هستش که یکسری توابع(methods) داخلش است مثل"map" و ...

setView: آیا این هم تابع هستش؟ میدونم که جزء توابع آبجکت L نیست. آیا از توابع داخل map هستش؟

 

2. برای تعریف setView جدید گفتیم داریم: مثلا

map.setView([35.78, 51.28], 13);

که map متغیرمون هستش، در کد بالا setView جدید overwrite میشه؟

 

3. برای دریافت bound هم نوشتیم:

var northLine = map.getBounds().getNorth();

دوباره از متغیر map استفاده کردیم به اضافه چند متد. اگر کد بالا را بدون متغر map بنویسیم، داریم:

var north = L.map('map').setView([35.6892, 51.3890], 13).getBounds().getNorth();

اگر bound‌های صفحه را به روش بالا تعریف کنیم کار نمیکنه!

متوجه نمیشم که چرا همین جوری متدها رو پشت هم می‌نویسیم؟!

 

4. توابع جاوااسکریپت هم که بهمون event برمیگردانند هم درک نمیکنم که چی میشه؟

مثلا یه جا event رو برمی گردانیم و با متد stopPropagation استفاده می‌کنیم،

یا مثلا در این پروژه یکسری آبجکت به ما میده، مثل lat&lng

نمیفهمم?

سلام و احترام

۱ - کتابخانه leaflet با مفاهیم شئ گرایی توسعه داده میشه به خاطر همینه که از طریق L شما به یکسری از توابع دسترسی دارید و از درون توابع‌های L نیز شما به توابع دیگر دسترسی دارید، اگر بخواهم واضع‌تر بگم مثل یک زنجیر میمونه که بهم دیگه وصلن.

۲ - setView جدیدی که تعریف می‌کنید باعث overwrite شدن آن می‌شود

۳ - در این کد که شما آورده اید:

L.map('map').setView([35.6892, 51.3890], 13).getBounds().getNorth();

setview تابعی به نام getBounds ندارد به خاطر همینه که شما خروجی دریافت نمی‌کنید، همان طور که اشاره شد این کتابخانه با مفاهیم شئ گرایی در حال توسعه است و توابع را می‌توان زنجیر وارد داشت.

هر تابعی که شما صدا می‌زنید یک سری توابع‌های مرتبط درون خودش دارد

۴ - طبق عملی که درون سند html اتفاق می‌افته به شما event برمیگردونه 

برای مثال وقتی شما روی یک فرم کلیک میکنید تا اطلاعات شما رو به سمت سرور ارسال کنه شما می‌تونید این عمل ارسال شدن رو متوقف کنید چون یک event هست یا وقتی روی یک نقشه کلیک می‌کنید تغیراتی که اتفاق میتوفته برای مثال تغییر موقعیت شما تو نقشت پس این event میتونه lng & lat شما رو برگردونه.

بهترین پاسخ
امیر صالحی ۰۶ خرداد ۱۳۹۹، ۰۶:۳۰

ممنون از توضیحات

ولی بازم از این توابع در آبجکت‌ها سر در نیاوردم ?

چرا وقتی به صورت زیر ازش استفاده کردیم جواب داده:

var northLine = map.getBounds().getNorth();

این map بالا هم که همون متغیرمون هستش که داریم:

L.map('map').setView(DEFUALT_LOCATION, DEFUALT_ZOOM);

برای marker هم اومدیم به جای تعریف متغیر همه رو تو یک خط نوشتیم:

L.marker(DEFUALT_LOCATION).addTo(map).bindPopup('Hello. I`m here').openPopup();

 

محمدرضا ۰۶ خرداد ۱۳۹۹، ۰۸:۲۰

خب ببینید شما getBounds رو مستقیما از خود map میگیرد و کار میکنه چون داخل خود map همچین تابعی تعریف شده

ولی وقتی getBounds رو از setView می‌خواهید، داخل setView همچنین تابعی وجود نداره و خروجی به شما نشون نمیده چون این تابع از طریق map قابل دسترس هست.

 

اگر سرفصل شئ گرایی رو مشاهده کرده باشید توی PHP ما متدهایی که از یک شئ میخواهیم رو با علامت <- دریافت می‌کنیم، مثال:

benz = new Car();
benz->go();

 

اما در جاوااسکریپ ما به جای <- از نقطه . استفاده می‌کنیم، برای مثال:

car.go()

 

امیر صالحی ۰۶ خرداد ۱۳۹۹، ۰۹:۲۸