#javascript #object #prototype #undefined
#javascript #объект #прототип #не определено
Вопрос:
Я слышал о прототипе метода для применения одной функции или переменной к нескольким объектам. Но у меня это почему-то не работает. Я создал много объектов вроде этого:
var item = {
a: {
aa: "lalala",
ab: 1,
something: 3
},
b: {
ba: "jfjb",
bb: 2,
something: 4
}
}
Но когда я знаю, используйте метод прототипа
item.prototype.bob = 2;
это не работает и показывает мне ошибку
Не удается установить для свойства ‘bob’ значение undefined»
То же самое для метода
item.prototype.bob = function() {
100 - this.something;
this.something ;
}
Вы знаете, что я делаю неправильно, или есть другой метод для применения одной и той же переменной или функции ко многим объектам?
Комментарии:
1. Проблема не в типе, который вы назначаете, а в типе
item
. Такitem.prototype
естьundefined
. И вы не можете вызвать.bob
onundefined
.
Ответ №1:
Вы путаете классы с экземплярами объектов. У вас просто анонимный объект. item
является экземпляром, а не классом.
Во фрагменте ниже объявляется класс ( Item
с большой буквы i), создается экземпляр ( item
) и модифицируется прототип класса. Тогда вы увидите, что можете задать свойство прототипу и читать его через экземпляр, если хотите.
var Item = function() {
a = {
aa: "lalala",
ab: 1,
something: 3
};
b = {
ba: "jfjb",
bb: 2,
something: 4
};
}
var item = new Item();
Item.prototype.bob = 'x';
alert(item.bob);
Ответ №2:
Классический способ — это
function Person(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
Person.prototype.greet = function() {
console.log(this.firstName " says hello");
}
var pete = new Person("Peter", "Pan");
pete.greet();
Обратите внимание, что атрибут prototype находится в конструкторе (объекте-функции, который мы вызываем с помощью new
для создания объекта), а не в самом созданном объекте.
В ECMAScript 6 вы сможете записать это более компактным способом:
class Person {
constructor(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
greet() {
console.log(this.firstName " says hello");
}
}
new Person("Peter", "Pan").greet();
Ответ №3:
Свойство prototype вызывается по имени класса, а не по имени объекта. Итак, если item является объектом класса MyClass, то вам следует написать:
MyClass.prototype.bob = 2;
Вы можете найти более подробную информацию по ссылкам ниже:
Ответ №4:
Здесь ваш элемент является объектом сам по себе, у него нет никакого конструктора, поэтому вы не можете определить или установить в prototype.Ваш код выдает ошибку
Чтобы исправить это, это должно быть что-то вроде приведенного ниже
function item(a,b){
this.a=a;
this.b=b;
}
function a(aa,ab,something){
this.aa=aa;
this.ab=ab;
this.something=something
}
item.prototype.bob=2;
item.prototype.method1 = function() {
100 - this.something;
this.something ;
}
Надеюсь, это поможет