JavaScript関数の再ロード
1766 ワード
転載してから:作者Funebugと本文の住所:https://blog.fundebug.com/2017/07/24/javascript_metho_overloading/
function addMethod(object, name, fn)
{
var old = object[name];
object[name] = function()
{
if (fn.length == arguments.length)
return fn.apply(this, arguments);
else if (typeof old == 'function')
return old.apply(this, arguments);
};
}
// , name
function find0()
{
return this.names;
}
// , firstName name
function find1(firstName)
{
var result = [];
for (var i = 0; i < this.names.length; i++)
{
if (this.names[i].indexOf(firstName) === 0)
{
result.push(this.names[i]);
}
}
return result;
}
// , firstName lastName name
function find2(firstName, lastName)
{
var result = [];
for (var i = 0; i < this.names.length; i++)
{
if (this.names[i] === (firstName + " " + lastName))
{
result.push(this.names[i]);
}
}
return result;
}
function Users()
{
addMethod(Users.prototype, "find", find0);
addMethod(Users.prototype, "find", find1);
addMethod(Users.prototype, "find", find2);
}
var users = new Users();
users.names = ["John Resig", "John Russell", "Dean Tom"];
console.log(users.find()); // [ 'John Resig', 'John Russell', 'Dean Tom' ]
console.log(users.find("John")); // [ 'John Resig', 'John Russell' ]
console.log(users.find("John", "Resig")); // [ 'John Resig' ]
console.log(users.find("John", "E", "Resig")); // undefined