بازگشت به درس

یک instanceof عجیب

اهمیت: 5

در ک پایین، چرا instanceof مقدار true را برمی‌گرداند؟ ما می‌توانیم به راحتی ببینیم که a توسط B() ساخته نشده است.

function A() {}
function B() {}

A.prototype = B.prototype = {};

let a = new A();

alert( a instanceof B ); // true

بله، واقعا عجیب به نظر می‌رسد.

اما instanceof به تابع اهمیتی نمی‌دهد بلکه prototype آن مهم است که در زنجیره پروتوتایپی همتای آن پیدا شود.

و اینجا a.__proto__ == B.prototype برقرار است پس instanceof مقدار true برمی‌گرداند.

پس بنابر منطق instanceof، ویژگی prototype در واقع نوع را تعریف می‌کند نه تابع تابع سازنده را.