Домашнее задание: Js. Основы
Согласно спецификации http://es5.github.com/#x11.2.2 напишите функцию, которая реализует оператор new
под Firefox или Хром.
Скелет функции должен быть следующим
/**
* @param {Function} Constructor
* @param {Array} [args]
*
* @return {Object}
*/
function myNew(Constructor, args) {}
В качестве проверки на [[Construct]]
используйте следующую функцию. Она не совсем точена, но из клиента [[Construct]]
больше никак не проверить.
function isConstructor(func) {
return typeof func === "function" && func.hasOwnProperty('prototype');
}
// isConstructor(String.prototype.match) === false
// isConstructor(String) === true
Напишите тест, который порывает все особенности этого алгоритма. Будет здорово если вы приложите ссылку на jsfiddle.net
Согласно спецификации http://es5.github.com/#x11.9.3 реализуйте The Abstract Equality Comparison Algorithm
Скелет функции должен быть следующим
/**
* @param {Mixed} x
* @param {Mixed} y
*
* @return {Boolean}
*/
function myEqual(x, y) {}
В качестве функции Type
используйте слудующую
var allowedTypes = ["Object", "Undefined", "Null", "Boolean", "Number", "String"];
/**
* @param {Mixed} x
*
* @return {String}
*/
function Type(x) {
var type = Object.prototype.toString.call(x).replace(/^\[object\s|\]$/g, '');
return ~allowedTypes.indexOf(type) && type || "Object";
}
В качестве функции проверки на отрицательный ноль используйте следующую
/**
* @param {Number} x
*
* @return {Boolean}
*/
function isNegativeZero (x) {
return x === 0 && (1 / x) === -Infinity;
}
Напишите тест, который порывает все особенности этого алгоритма. Будет здорово если вы приложите ссылку на jsfiddle.net
См. также: пост про домашние задания.