Я много об этом искал, но не нашел прямого ответа
Почему мы не можем получить доступ к свойству / методу прототипа объекта, созданного с помощью Object.create()
, но мы можем использовать ключевое слово new
?
Рассмотрим функцию-конструктор Greeting
следующим образом:
function Greeting() {
}
Greeting.prototype.byeBye = function(){
console.log("Have a good day!")
}
Теперь я создаю объект из этого конструктора, используя Object.create()
метод
var Stanley = Object.create(Greeting)
console.log(Stanley.byeBye())
Output - Error: Stanley.byeBye is not a function
Это означает, что к функции byeBye()
нельзя получить доступ напрямую, используя Stanley object
Если вы проверяете Stanley объект в консоли, то вы найдете следующую структуру:
![enter image description here](https://i.stack.imgur.com/aA5a4.png)
Однако, если мы используем ключевое слово new
для создания объекта, тогда мы можем получить прямой доступ к byeBye()
функции-прототипу
var Hamley = new Greeting()
console.log(Hamley.byeBye())
Output: Have a good day!
При проверке структуры Hamley объекта в консоли мы получаем его так:
![enter image description here](https://i.stack.imgur.com/bqFo2.png)
Я сомневаюсь, что почему мы не можем получить доступ к свойству / методу прототипа объекта, созданного с использованием Object.create()
, но мы можем использовать ключевое слово new
.
Другое сомнение заключается в том, что в случае Object.create()
метод-прототип byeBye()
получает отдельное свойство в __proto__
, которое называется 'prototype
'. Принимая во внимание, что в случае new
, функция byeBye()
доступна непосредственно под __proto__
.
Примечание: Пожалуйста, проверьте ссылки, чтобы открыть изображения, связанные со вторым сомнением
Спасибо всем, кто ответит на этот пост!