2016-04-21 3 views
0

Дразнящий нормальные функции объектов работают обычно так:Как издеваются строковыми функции в Javascript и QUnit

objToMock.funcToMock = function (param1, ...) { 
    equal(param1, 'expectedValue', 'param1 passed correctly'); 
} 

Если я пытаюсь это с родной строчной функцией, ошибка И брошена:

var name = 'test_string'; 
name.split = function (limiter) { 
    ok(true, 'split called'); 
} 

ошибка:

Source: TypeError: Cannot create property 'split' on string 'test_string' 

существует ли механизм блокировки для встроенных строковых функций? Я думал, что строки также являются объектами с функциями. Доступ к прототипу «test_string» не работает, поскольку «прототип» не определен.

Поиск в Интернете/stackoverflow довольно сложно, поскольку «javascript», «string», «split» и «mock» являются слишком универсальными значениями поиска.

Благодарим за помощь!

+0

подсказка: 'prototype' определяется на' constructor', а не на 'instance'. и посмотрим на это: 'var name = Object ('test_string')' – Thomas

ответ

0

Фактически, строковый литерал является независимым типом, он отличается от объекта. В javascript вы можете назначать значение для объекта только объекту.

Когда вы вызываете 'string'.split, строка будет преобразована в объект String взади. Итак, ваше назначение бесполезно.

Если вы указали свой код в строгом режиме, это приведет к ошибке.

Вы можете изменить свой код так:

var name = new String('test_string'); 
name.split = function (limiter) { 
    ok(true, 'split called'); 
} 
+0

Он работает на моем компьютере любым способом. –

+0

Спасибо! Это работает и для меня. В качестве основного метода проверок единичного теста была указана проблема с именем «input» с именем «typeof», который не работает с объектом String. Двойной знак с именем (typeof name === 'string' || name instanceof String) "сделал трюк. –

+0

Но, 'new String ('test_string')' и '' test_string'' даст вам ту же строку ... как это поможет? – evolutionxbox

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