Как я могу вызвать функцию-прототип из основной функции / конструктора объекта в javascript. Я пробовал следующее, но не работает. Что я делаю неправильно?
var x = new myFunction('Hello World!');
function myFunction(name) {
this.name = name;
alert( toString() ); // not working
alert( this.toString() ); // not working either
};
myFunction.prototype.toString = function() {
return 'My name is ' + this.name;
};
1 ответ
Вы создаете экземпляр myFunction и вызываете для него toString перед установкой прототипа.
Причина, по которой вы можете создать экземпляр myFunction даже до того, как объявите его, заключается в том, что он был поднял. Однако toString не поднимается и будет отображать [Объект объекта].
Решение - создать экземпляры после того, как вы полностью объявите объект.
Примечание. Функция-конструктор должна начинаться с заглавной буквы, поэтому это должна быть MyFunction, а не myFunction, и, возможно, дать ей имя, которое на самом деле означает что-то вроде Person или Animal, поскольку никто не поймет, что такое MyFunction. .
function myFunction(name) {
this.name = name;
//console.log is so much better than alert
console.log('this is:',this,'this.toString:'
, this.toString() );
};
myFunction.prototype.toString = function() {
return 'My name is ' + this.name;
};
var x = new myFunction('Hello World!');
Подробнее о прототипе здесь: Прототипное наследование - запись
var x = new myFunction('Hello World!')
вниз, это работает. Есть идеи, почему?
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Имейте в виду, что JavaScript — это НЕ то же самое, что Java! Включите все ярлыки, относящиеся к вашему вопросу; например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [svelte] и т. д.
myFunction
с помощьюnew
, иначеthis
не будет тем, чем должен быть.var func = new myFunction("foo"); console.log(func.toString());
new myFunction('test')
.