Метод WORKING {если нет проблем, кроме конфигурации}
По умолчанию Appache не ограничивает доступ из ipv4. (общий внешний ip)
Что может быть ограничено конфигурациями в «httpd.conf» (или «apache2.conf» в зависимости от вашей конфигурации apache)
Решение:
Заменить все:
<Directory />
AllowOverride none
Require all denied
</Directory>
с
<Directory />
AllowOverride none
# Require all denied
</Directory>
, поэтому удалив все ограничения, предоставленные Apache
Замените Require local
на Require all granted
в каталоге C:/wamp/www/
<Directory "c:/wamp/www/">
Options Indexes FollowSymLinks
AllowOverride all
Require all granted
# Require local
</Directory>
Я сделал больше моего собственного расследования и придумал заключение, что это - невозможный подвиг , из-за того, как класс Даты реализован.
я осмотрел исходный код SpiderMonkey , чтобы видеть, как Дата была реализована. Я думаю, что все это сводится к следующим немногим строкам:
static JSBool
Date(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
jsdouble *date;
JSString *str;
jsdouble d;
/* Date called as function. */
if (!(cx->fp->flags & JSFRAME_CONSTRUCTING)) {
int64 us, ms, us2ms;
jsdouble msec_time;
/* NSPR 2.0 docs say 'We do not support PRMJ_NowMS and PRMJ_NowS',
* so compute ms from PRMJ_Now.
*/
us = PRMJ_Now();
JSLL_UI2L(us2ms, PRMJ_USEC_PER_MSEC);
JSLL_DIV(ms, us, us2ms);
JSLL_L2D(msec_time, ms);
return date_format(cx, msec_time, FORMATSPEC_FULL, rval);
}
/* Date called as constructor. */
// ... (from here on it checks the arg count to decide how to create the date)
, Когда Дата используется в качестве функции (или как Date()
или Date.prototype.constructor()
, которые являются точно тем же самым), оно принимает значение по умолчанию к возврату текущего времени как строка в формате локали. Это независимо от любых аргументов, которые передаются в:
alert(Date()); // Returns "Thu Oct 09 2008 23:15:54 ..."
alert(typeof Date()); // Returns "string"
alert(Date(42)); // Same thing, "Thu Oct 09 2008 23:15:54 ..."
alert(Date(2008, 10, 10)); // Ditto
alert(Date(null)); // Just doesn't care
я не думаю, что существует что-либо, что может быть сделано на уровне JS для хитрости этого. И это - вероятно, конец моего преследования в этой теме.
я также заметил что-то интересное:
/* Set the value of the Date.prototype date to NaN */
proto_date = date_constructor(cx, proto);
if (!proto_date)
return NULL;
*proto_date = *cx->runtime->jsNaN;
Date.prototype
экземпляр Даты с внутренним значением NaN
и поэтому,
alert(Date.prototype); // Always returns "Invalid Date"
// on Firefox, Opera, Safari, Chrome
// but not Internet Explorer
, IE не разочаровывает нас. Это делает вещи немного по-другому и вероятно устанавливает внутреннее значение к -1
так, чтобы Date.prototype всегда возвращал дату немного перед эпохой.
я наконец вырыл в сам ECMA-262, и оказывается, чего я пытаюсь достигнуть (с объектом Даты), - по определению - не возможен:
15.9.2 Конструктор Date, Названный как Функция
, Когда Дату называют как функция, а не как конструктор, она возвращает строку, представляющую текущее время (UTC).
ПРИМЕЧАНИЕ вызов функции
Date(…)
не эквивалентен выражениюnew Date(…)
создания объекта с теми же аргументами.15.9.2.1 Даты ([год [месяц [дата [часы [минуты [секунды [мс]]]]]]])
Все аргументы являются дополнительными; любые предоставленные аргументы приняты, но полностью проигнорированы. Строка создается и возвращается как будто по выражению
(new Date()).toString()
.
Это менее элегантно, но вот решение:
function GeneratedConstructor (methodName, argumentCount) {
var params = []
for (var i = 0; i < argumentCount; i++) {
params.push("arguments[" + i + "]")
}
var code = "return new " + methodName + "(" + params.join(",") + ")"
var ctor = new Function(code)
this.createObject = function (params) {
return ctor.apply(this, params)
}
}
То, как это работает, должно быть довольно очевидным. Это создает функцию посредством генерации кода. В этом примере есть фиксированное количество параметров для каждого создаваемого вами конструктора, но в любом случае это полезно. В большинстве случаев вы имеете в виду максимальное количество аргументов. Это также лучше, чем некоторые другие примеры здесь, потому что это позволяет вам сгенерировать код один раз, а затем повторно использовать его. Сгенерированный код использует преимущества функции переменных аргументов в javascript, так что вы можете избежать именования каждого параметра (или прописать их в списке и передать аргументы генерируемой вами функции). Вот рабочий пример:
var dateConstructor = new GeneratedConstructor("Date", 3)
dateConstructor.createObject( [ 1982, 03, 23 ] )
Это вернет следующее:
Пт 23 апреля 1982 00:00: 00 GMT-0800 (PST)
Это действительно все еще ... немного уродливо. Но это по крайней мере удобно скрывает беспорядок и не предполагает, что сам скомпилированный код может собирать мусор (так как это может зависеть от реализации и является вероятной областью для ошибок).
Приветствия, Скотт С. Маккой
Я бы не назвал это элегантным, но в моем тестировании (FF3, Saf4, IE8) он работает:
var arr = [2009, 6, 22, 10, 30, 9 ];
Вместо этого:
var d = new Date (arr [0], arr [1], arr [2], arr [3], arr [4], arr [5]);
Попробуйте следующее:
var d = new Date (Date.UTC.apply (window, arr) + ((new Date ()). GetTimezoneOffset () * 60000));
Вы можете сделать это с вопиющим, вопиющим злоупотреблением eval:
var newwrapper = function (constr, args) {
var argHolder = {"c": constr};
for (var i=0; i < args.length; i++) {
argHolder["$" + i] = args[i];
}
var newStr = "new (argHolder['c'])(";
for (var i=0; i < args.length; i++) {
newStr += "argHolder['$" + i + "']";
if (i != args.length - 1) newStr += ", ";
}
newStr += ");";
return eval(newStr);
}
пример использования:
function Point(x,y) {
this.x = x;
this.y = y;
}
var p = __new(Point, [10, 20]);
alert(p.x); //10
alert(p instanceof Point); //true
Enjoy =).
Это - то, как Вы могли бы решить определенный case:-
function writeLn(s)
{
//your code to write a line to stdout
WScript.Echo(s)
}
var a = [ 2008, 10, 8, 00, 16, 34, 254 ]
var d = NewDate.apply(null, a)
function NewDate(year, month, date, hour, minute, second, millisecond)
{
return new Date(year, month, date, hour, minute, second, millisecond);
}
writeLn(d)
Однако, Вы ищете более общее решение. Рекомендуемый код для создания метода конструктора должен иметь его return this
.
Hence:-
function Target(x , y) { this.x = x, this.y = y; return this; }
мог быть созданным:-
var x = Target.apply({}, [1, 2]);
Однако не, все реализации прокладывают себе путь не в последнюю очередь, потому что цепочка прототипа была бы wrong:-
var n = {};
Target.prototype = n;
var x = Target.apply({}, [1, 2]);
var b = n.isPrototypeOf(x); // returns false
var y = new Target(3, 4);
b = n.isPrototypeOf(y); // returns true
var comps = [ 2008, 10, 8, 00, 16, 34, 254 ];
var d = eval("new Date(" + comps.join(",") + ");");
Отредактированный
Извините, я был уверен, что сделал его тем путем несколько лет назад, прямо сейчас я буду придерживаться:
var d = новая Дата (аккомпанементы [0], аккомпанементы [1], аккомпанементы [2], аккомпанируют [3], аккомпанируют [4], аккомпанируют [5], аккомпанируют [6]);
Редактирование:
, Но действительно помнят, что объект Даты JavaScript использует индексы в течение многих месяцев, таким образом, вышеупомянутый массив означает
8 ноября 2008 00:16:34:254