تابستون داره تموم میشه ها، فرصت‌ها محدودن کلی آفر جذاب در کمپین تابستون🔥👇
۰ ثانیه
۰ دقیقه
۰ ساعت
۲ amirhossein khandestani
به درستی کار نکردن prototype.
جامعه جاوا اسکریپت ایجاد شده در ۲۹ مهر ۱۴۰۲

سلام

استاد فرمودند بوسیله ی prototype. میشود خاصیت ارث بری را اضافه کرد اما چرا prototype. به درستی کار نمیکند ، در حالی که __proto__ درست کار میکند و مقدار درست را بدون اضافه کردن چیز اضافه ای در کنسول نمایش میدهد؟

 

'use strict'
        let human = {
            name : "shaker",
            famil : "ahmadi"
        }
        let shoes = {
            colorShoe : "red",
            brandShoe : "nike",
            numShoe : 65
        }
        function meTo() {
            this.age = 95;
            this.address = "tehran";
        }
        let shakerAge = new meTo();
        shoes.__proto__ = human;
        // shakerAge.__proto__ = shoes;
        shakerAge.prototype = shoes;
        console.log(shoes.name);   //shaker
        console.log(shakerAge.name);  //undifind
        console.log(shakerAge.prototype.name); //shaker

سلام،

دلیل اینکه prototype درست کار نمی‌کند این است که prototype یک property است که به Constructor‌ها اضافه می‌شود، در حالی که proto یک property است که به شیء اضافه می‌شود.

در کد بالا، shoes یک شیء ساده است و constructor نیست. پس نمی‌توان با prototype به آن خاصیت ارث‌بری اضافه کرد.

اما proto یک property داخلی شیء است و به راحتی می‌توان آن را تنظیم کرد.

shoes یک شیء ساده است، پس باید از proto استفاده کنیم نه prototype.

محسن موحد ۳۰ مهر ۱۴۰۲، ۰۷:۰۱

در مثالی که بالا زدم هم در یک آبجکت معمولی استفاده کردم و هم در یک کانسترکتور؛ ولی در هر دو نوع، prototype را به عنوان پراپرتی میشناسد ؛ و آن اتفاقی که برای __proto__ می‌افتد در اینجا رخ نمیدهد.

 

در پایین به آن قسمتی از کد سوال قبل که با کانستراکتور استفاده کرده بودم دوباره جهت بررسی اشاره میکنم:

 

// shakerAge.__proto__ = shoes;
        shakerAge.prototype = shoes;
amirhossein khandestani ۰۱ آبان ۱۴۰۲، ۱۱:۳۷