2016-12-12 3 views
0

Я пишу код, который должен ссылаться на this внутри прототипа, но он не может быть функцией. Javascript не позволит мне сделать это, но похоже, что свойство массивов и строк length делает это. Я знаю, что length встроен, а моего кода нет, но если смогу, как это реализовать?Как работает свойство length?

Я пробовал:

String.prototype.prototypeName = (function(aThing){ 
    //Do whatever I need to do here 
})(this); 

Но что ссылки на глобальный объект, поскольку this вызывается вне функции.

String.prototype.prototypeName = function(aThing){ 
    //Do whatever I need to do here referencing this 
}; 

Однако, это функция, и я не могу этого.

У меня нет функции, потому что пользователь может вызвать функцию и использовать на ней typeof, и прототип должен возвращать строку. Например:

String.prototype.reverse = "Put something that is the reversed string (or this)"; 
console.log("Stuff"); //"ffutS" 
console.log("Anything"); //gnihtynA 
+3

Используйте getter https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get –

+1

«* ссылайтесь на это внутри прототипа, но он не может быть функцией *", " * Предполагается, что прототип вернет строку * "- что? Пожалуйста, покажите ожидаемый результат того, как вы будете использовать то, о чем просите. – Bergi

+0

Нет, невозможно повторно реализовать то, что '.length' делает на массивах. – Bergi

ответ

0

Вы можете использовать Javascript getter для доступа вычисляемого свойства без вызова функции прототипа. Обратите внимание, что это только IE9 +.

Смежные вопросы