ProGraphs
تفاوت این دو روش برای چک کردن وجود یا عدم وجود یک پراپرتی در آبجکت چیست؟ #interviewquestion #js @ProGraphs
جواب:
عملگر in پراپرتی مورد نظر را در کل prototype chain آبجکت چک میکند.
ولی متد hasOwnProperty پراپرتی را فقط در خود آبجکت چک میکند و کاری به prototype chain ندارد.
(اگر مفهوم prototype chain را فراموش کردید این مطلب را مرور کنید: https://t.iss.one/ProGraphs/131)
عملگر in پراپرتی مورد نظر را در کل prototype chain آبجکت چک میکند.
ولی متد hasOwnProperty پراپرتی را فقط در خود آبجکت چک میکند و کاری به prototype chain ندارد.
(اگر مفهوم prototype chain را فراموش کردید این مطلب را مرور کنید: https://t.iss.one/ProGraphs/131)
Telegram
ProGraphs
توضیح مفهوم کلی prototype در جاوااسکریپت (بخش اول)
تقریبا تمامی آبجکتها در جاوااسکریپت یک پراپرتی internal به نام [[prototype]] دارند که به یک آبجکت دیگر اشاره میکند. (این پراپرتی مختص انجین هست)
حال اگر بخواهیم به یک پراپرتی از یک آبجکت دسترسی پیدا…
تقریبا تمامی آبجکتها در جاوااسکریپت یک پراپرتی internal به نام [[prototype]] دارند که به یک آبجکت دیگر اشاره میکند. (این پراپرتی مختص انجین هست)
حال اگر بخواهیم به یک پراپرتی از یک آبجکت دسترسی پیدا…
🔺 یه مجموعه خوب از آیکونهای قابل تنظیم و تغییر 🎉
https://www.ikonate.com/#content
#link #icon
@ProGraphs
https://www.ikonate.com/#content
#link #icon
@ProGraphs
Ikonate
Ikonate – fully customisable & accessible vector icons
Customise, adjust and download free vector icons. Ikonate is an adaptable set of optimised, accessible SVG icons that use can easily use in both development and design apps such as Sketch and Photoshop. Ready to use as images, inline SVGs or SVG sprites.
توضیح مفهوم کلی prototype در جاوااسکریپت (بخش سوم)
در مطالب قبل با پراپرتی [[prototype]] و کاربرد آن آشنا شدیم. یک روش برای لینک کردن آبحکتها با استفاده از prototype هم بررسی کردیم. حالا میخواهیم روشی سادهتر برای این کار بررسی کنیم:
روش دوم:
استفاده از Object.create. این متد یک آبجکت را به عنوان ورودی دریافت میکند و آبجکت جدیدی return میکند که از طریق [[prototype]] به آبجکت مورد نظر لینک شده است.
در تصویر میبینید که بدون استفاده از تابع و new و ... خیلی ساده دو آبجکت را با [[prototype]] به هم لینک کردیم
روش اول پایهی پیاده سازی مکانیزمهای OOP در جاوااسکریپت هست که احتمالا زیاد با آن برخورد کردید.
ولی دقت کنید که لینک کردن آبجکتها به یکدیگر با روش سادهتر که Object.create است در خیلی از مواقع بهتر و سادهتر است.
#quicktip #js
@ProGraphs
در مطالب قبل با پراپرتی [[prototype]] و کاربرد آن آشنا شدیم. یک روش برای لینک کردن آبحکتها با استفاده از prototype هم بررسی کردیم. حالا میخواهیم روشی سادهتر برای این کار بررسی کنیم:
روش دوم:
استفاده از Object.create. این متد یک آبجکت را به عنوان ورودی دریافت میکند و آبجکت جدیدی return میکند که از طریق [[prototype]] به آبجکت مورد نظر لینک شده است.
در تصویر میبینید که بدون استفاده از تابع و new و ... خیلی ساده دو آبجکت را با [[prototype]] به هم لینک کردیم
روش اول پایهی پیاده سازی مکانیزمهای OOP در جاوااسکریپت هست که احتمالا زیاد با آن برخورد کردید.
ولی دقت کنید که لینک کردن آبجکتها به یکدیگر با روش سادهتر که Object.create است در خیلی از مواقع بهتر و سادهتر است.
#quicktip #js
@ProGraphs
ProGraphs
توضیح مفهوم کلی prototype در جاوااسکریپت (بخش سوم) در مطالب قبل با پراپرتی [[prototype]] و کاربرد آن آشنا شدیم. یک روش برای لینک کردن آبحکتها با استفاده از prototype هم بررسی کردیم. حالا میخواهیم روشی سادهتر برای این کار بررسی کنیم: روش دوم: استفاده…
مفهوم prototype پایهی خیلی از patternها و paradigmها در جاوااسکریپت است. ولی متاسفانه خیلی از دولوپرها بدون درک درست این مفهوم ازش استفاده میکنند.
تو این سری مطالب سعی کردیم مفهوم کلی prototype رو بدون توجه به OOP و ... بررسی کنیم که وقتی pattern ها و paradigmهایی مثل OOP رو پیاده سازی میکنید از نحوه کارکرد مکانیزمهای پایهای مثل prototype, new, ... هم مطلع باشید.
اگر فکر میکنید بررسی خود patternهای قابل پیاده سازی با prototype میتونه مفید باشه. یا اگر اشکالی تو این مطالب دیدید و یا اگر هر نظر دیگهای دارید میتونید از این طریق با ما در میون بذارید:
@HiProGraphsBot
تو این سری مطالب سعی کردیم مفهوم کلی prototype رو بدون توجه به OOP و ... بررسی کنیم که وقتی pattern ها و paradigmهایی مثل OOP رو پیاده سازی میکنید از نحوه کارکرد مکانیزمهای پایهای مثل prototype, new, ... هم مطلع باشید.
اگر فکر میکنید بررسی خود patternهای قابل پیاده سازی با prototype میتونه مفید باشه. یا اگر اشکالی تو این مطالب دیدید و یا اگر هر نظر دیگهای دارید میتونید از این طریق با ما در میون بذارید:
@HiProGraphsBot
📌 بایگانی Roadmap های مختلف:
✅ نقشه راه برای Web developer شدن در سال 2018
https://t.iss.one/ProGraphs/49
✅ نقشه راه برای توسعهدهنده حرفهای React شدن در سال 2018
https://t.iss.one/ProGraphs/64
✅ نقشه راه برای توسعهدهنده حرفهای Vue شدن در سال 2018
https://t.iss.one/ProGraphs/72
✅ نقشه راه برای UI/UX Designer شدن
https://t.iss.one/ProGraphs/102
✅ نقشه راه برای توسعهدهنده حرفهای Angular شدن در سال 2018
https://t.iss.one/ProGraphs/104
🌹 این مطلب رو با دوستان خود به اشتراک بگذارید. 🌹
#archive #roadmap
@ProGraphs
✅ نقشه راه برای Web developer شدن در سال 2018
https://t.iss.one/ProGraphs/49
✅ نقشه راه برای توسعهدهنده حرفهای React شدن در سال 2018
https://t.iss.one/ProGraphs/64
✅ نقشه راه برای توسعهدهنده حرفهای Vue شدن در سال 2018
https://t.iss.one/ProGraphs/72
✅ نقشه راه برای UI/UX Designer شدن
https://t.iss.one/ProGraphs/102
✅ نقشه راه برای توسعهدهنده حرفهای Angular شدن در سال 2018
https://t.iss.one/ProGraphs/104
🌹 این مطلب رو با دوستان خود به اشتراک بگذارید. 🌹
#archive #roadmap
@ProGraphs
احتمالا دقت کردید که برای ایجاد گرادینت در CSS باید گرادینت را در راستای شکلی خاص مانند خط (linear) یا دایره (radial) تعریف کنیم.
اما با ترفندی که در تصویر میبینید میتوانیم با ترکیب چند گرادینت و blend-mode گرادینتی بدون شکل واضح درست کنیم (مثل گرادینتی که احتمالا در صفحه ورود اینستاگرام دیدید)
#quicktip #css #trick
@ProGraphs
اما با ترفندی که در تصویر میبینید میتوانیم با ترکیب چند گرادینت و blend-mode گرادینتی بدون شکل واضح درست کنیم (مثل گرادینتی که احتمالا در صفحه ورود اینستاگرام دیدید)
#quicktip #css #trick
@ProGraphs
قالب های Landing Page رایگان برای استارتآپها 🎉
https://cruip.com/
#link #landingpage #template
@ProGraphs
https://cruip.com/
#link #landingpage #template
@ProGraphs
ProGraphs
آیا با data attribute ها در html آشنا هستید؟ کاربرد آنها چیست؟ #interviewquestion #html @ProGraphs
جواب:
برای ذخیرهی دیتای مختص به یک عنصر از data-attribute ها استفاده میکنیم.
در html برای کنترل بعضی از ویژگیهای عناصر attribute هایی تعیین شده است مثلا برای تعیین آدرس یک لینک از href استفاده میکنیم. اما اگر بخواهیم ویژگی جدیدی برای عناصر پیاده سازی کنیم که از قبل در html تعیین نشده میتوانیم این مقدار را به کمک جاوااسکریپت و data-attribute ها پیاده کنیم.
برای مثال فرض کنید میخواهیم مکانیزم نمایش alert در صفحه را پیاده سازی کنیم:
چندین عنصر alert در صفحه داریم که هر کدام باید مدت زمان خاصی نمایش داده شوند و بعد به صورت خودکار از صفحه حذف شوند. برای کنترل مقدار زمانی که هر alert در صفحه میماند به این شکل عمل میکنیم:
برای ذخیرهی دیتای مختص به یک عنصر از data-attribute ها استفاده میکنیم.
در html برای کنترل بعضی از ویژگیهای عناصر attribute هایی تعیین شده است مثلا برای تعیین آدرس یک لینک از href استفاده میکنیم. اما اگر بخواهیم ویژگی جدیدی برای عناصر پیاده سازی کنیم که از قبل در html تعیین نشده میتوانیم این مقدار را به کمک جاوااسکریپت و data-attribute ها پیاده کنیم.
برای مثال فرض کنید میخواهیم مکانیزم نمایش alert در صفحه را پیاده سازی کنیم:
چندین عنصر alert در صفحه داریم که هر کدام باید مدت زمان خاصی نمایش داده شوند و بعد به صورت خودکار از صفحه حذف شوند. برای کنترل مقدار زمانی که هر alert در صفحه میماند به این شکل عمل میکنیم:
<div class="alert" data-timeout="2000">در مرحله بعد در جاوااسکریپ از مقدار data-timeout استفاده میکنیم و پس از زمان تعیین شده عنصر را از صفحه حذف میکنیم.
alert!
</div>
بر خلاف تصور اکثر دولوپرها جاوااسکریپت در مرورگرهای مدرن به صورت مفسری اجرا نمیشود و کد جاوااسکریپت قبل از اجرا کامپایل میشود.
اما کد کامپایل شده جاوااسکریپت را برخلاف زبانی مثل جاوا منتشر نمیکنیم و فقط خود مرورگر برای optimize کردن کد، قبل از هر بار اجرا آن را کامپایل میکند. به این روش JIT یا Just-in-time compilation گفته میشود.
البته در عمل مرورگرها قبل از اجرای کد زمان کافی برای کامپایل کردن تمام و کمال کد ندارند و مجبور به استفاده از تکنیکهای پیچیدهتری هستند که در این مقاله میتوانید مطالعه کنید:
https://hacks.mozilla.org/2017/02/a-crash-course-in-just-in-time-jit-compilers/
#quicktip #js
@ProGraphs
اما کد کامپایل شده جاوااسکریپت را برخلاف زبانی مثل جاوا منتشر نمیکنیم و فقط خود مرورگر برای optimize کردن کد، قبل از هر بار اجرا آن را کامپایل میکند. به این روش JIT یا Just-in-time compilation گفته میشود.
البته در عمل مرورگرها قبل از اجرای کد زمان کافی برای کامپایل کردن تمام و کمال کد ندارند و مجبور به استفاده از تکنیکهای پیچیدهتری هستند که در این مقاله میتوانید مطالعه کنید:
https://hacks.mozilla.org/2017/02/a-crash-course-in-just-in-time-jit-compilers/
#quicktip #js
@ProGraphs
آیا با مفهوم hoisting در جاوااسکریپت آشنا هستید؟
نحوه عملکرد آن را توضیح بدید
#interviewquestion #js
@ProGraphs
نحوه عملکرد آن را توضیح بدید
#interviewquestion #js
@ProGraphs
بالاخره نتایج امسال هم مشخص شدند.
حتما ببینید 👌
https://2018.stateofjs.com/
#link #statistics #js
@ProGraphs
حتما ببینید 👌
https://2018.stateofjs.com/
#link #statistics #js
@ProGraphs
Stateofjs
The State of JavaScript 2018: Home
Discover the most popular JavaScript technologies of the year.
یکی از دوستان یه مجموعه عالی از مقالهها در مورد دسترس پذیری در وب نوشتند. این اولین مقاله از این سری مقالههاست.
پیشنهاد میکنم حتما بخونید 👌
https://virgool.io/@abolfazlillustray920/web-accessibility-capglgmj5tzk
#link #accessibility
@ProGraphs
پیشنهاد میکنم حتما بخونید 👌
https://virgool.io/@abolfazlillustray920/web-accessibility-capglgmj5tzk
#link #accessibility
@ProGraphs
ویرگول
دسترس پذیری یا همان accessibility در دنیای وب و مدرن وب اپلیکیشن ها(قسمت اول)
نمیدونم وقتی شروع کردم به خوندن مقاله هایی که در سطح وب در مورد دسترس پذیری در وب بود چه حسی بهم دست داد انگار یک حس تهی بودن یک حس اینکه من واقعا توسعه دهنده نیستم و یا شایدم انسان!وقتی با مطالب ها...
ProGraphs
آیا با مفهوم hoisting در جاوااسکریپت آشنا هستید؟ نحوه عملکرد آن را توضیح بدید #interviewquestion #js @ProGraphs
جواب:
کد زیر را در نظر بگیرید:
دلیل درست کار کردن این کد مفهوم hoisting است. در جاوااسکریپت تعریف متغیرها (فقط تعریف و نه مقداردهی) و توابع به بالای scope منتقل میشود و سپس بقیه کد اجرا میشود. به این ترتیب تعریف متغیر proGraphs قبل از مقداردهی به آن انجام میشود با اینکه در خط پایینتر قرار دارد.
و اما چرا این اتفاق میافتد و نحوه عملکرد hoisting چیست؟ (خیلی مهم)
در مطالب قبلی اشاره کردیم که کد جاوااسکریپت در مرورگرهای مدرن قبل از اجرا کامپایل میشود.
در واقع تعریف متغیرها و توابع در زمان کامپایل کد انجام میشود و مقداردهی و استفاده از آنها در زمان اجرا. به این ترتیب تعریف متغیر و مقداردهی به آن در دو زمان کاملا متفاوت (هر چند خیلی سریع) انجام میشود.
در حقیقت hoisting فقط یک مفهوم ذهنی است و این کامپایل شدن کد است که باعث میشود به متغیرها و توابع قبل از تعریف دسترسی داشته باشیم.
(همچنین متغیرهایی که با let و const تعریف میشوند hoist نمیشوند)
کد زیر را در نظر بگیرید:
proGraphs = 20;در خط اول مقدار متغیر را تعیین کردهایم در حالی که تعریف متغیر در خط بعدی است!
var proGraphs;
console.log(proGraphs); //20
دلیل درست کار کردن این کد مفهوم hoisting است. در جاوااسکریپت تعریف متغیرها (فقط تعریف و نه مقداردهی) و توابع به بالای scope منتقل میشود و سپس بقیه کد اجرا میشود. به این ترتیب تعریف متغیر proGraphs قبل از مقداردهی به آن انجام میشود با اینکه در خط پایینتر قرار دارد.
و اما چرا این اتفاق میافتد و نحوه عملکرد hoisting چیست؟ (خیلی مهم)
در مطالب قبلی اشاره کردیم که کد جاوااسکریپت در مرورگرهای مدرن قبل از اجرا کامپایل میشود.
در واقع تعریف متغیرها و توابع در زمان کامپایل کد انجام میشود و مقداردهی و استفاده از آنها در زمان اجرا. به این ترتیب تعریف متغیر و مقداردهی به آن در دو زمان کاملا متفاوت (هر چند خیلی سریع) انجام میشود.
در حقیقت hoisting فقط یک مفهوم ذهنی است و این کامپایل شدن کد است که باعث میشود به متغیرها و توابع قبل از تعریف دسترسی داشته باشیم.
(همچنین متغیرهایی که با let و const تعریف میشوند hoist نمیشوند)
ProGraphs
جواب: کد زیر را در نظر بگیرید: proGraphs = 20; var proGraphs; console.log(proGraphs); //20 در خط اول مقدار متغیر را تعیین کردهایم در حالی که تعریف متغیر در خط بعدی است! دلیل درست کار کردن این کد مفهوم hoisting است. در جاوااسکریپت تعریف متغیرها (فقط تعریف…
یه منبع عالی برای درک عمیق hoisting و نحوه کامپایل شدن کد جاوااسکریپت:
https://github.com/getify/You-Dont-Know-JS/blob/master/scope%20%26%20closures/ch4.md
https://github.com/getify/You-Dont-Know-JS/blob/master/scope%20%26%20closures/ch4.md
در مطالب قبلی اشاره کردیم که انجین جاوااسکریپت در مرحلهی کامپایل کد، متغیرهای موجود در هر scope را تعریف میکند و سپس کد اجرا میشود.
به این ترتیب چند بار تعریف کردن یک متغیر کاملا نادیده گرفته میشود و هیچ تاثیری بر مقدار متغیر نخواهد داشت. (به کد تصویر دقت کنید).
همچنین اگر متغیری که با let تعریف میکنیم قبلا تعریف شده باشد، error دریافت میکنیم.
#quicktip #js
@ProGraphs
به این ترتیب چند بار تعریف کردن یک متغیر کاملا نادیده گرفته میشود و هیچ تاثیری بر مقدار متغیر نخواهد داشت. (به کد تصویر دقت کنید).
همچنین اگر متغیری که با let تعریف میکنیم قبلا تعریف شده باشد، error دریافت میکنیم.
#quicktip #js
@ProGraphs