[英]Javascript function with arguments as object
我需要知道如何做类似jQuery的
$('x').y使我的网站。 有人可以帮忙吗?
myfunction('something')。method
要进行类似的工作:
myfunction('something').method()
myfunction
只需要返回一个具有.method
属性的对象。 jQuery就是这样做到的。
这是一个简单的例子:
function myfunction() {
// do whatever your function wants here
// then return an object with the .method property
return {
method: function() {
console.log("Hi");
return this;
}
}
}
myfunction().method();
而且,如果您从每个方法返回this
方法,则可以链接多个方法(就像jQuery一样):
function myfunction() {
return {
cntr: 0,
method1: function() {
console.log("Hi");
++this.cntr;
return this;
},
method2: function() {
console.log("Goodbye");
++this.cntr;
return this;
}
}
}
myfunction().method1().method2();
$.fn.greenify = function() {
this.css( "color", "green" );
};
$( "a" ).greenify(); // Makes all the links green.
在这里查看: http : //learn.jquery.com/plugins/basic-plugin-creation/
用属性创建对象。 通过字符串查找那些属性。
_("name").method();
_("name2").method();
function _ (property) {
var obj = {
name : {
method : function () { }
},
name2 : {
method : function () { }
}
};
return obj[property];
}
这是一个非常非常基础的版本,没有经过优化,并且很难扩展和维护。
jQuery通过查找对象并将其缓存来工作。
在这里,您无需查找DOM对象; 这只是函数内部的一个对象,每次调用该函数时都会对其进行重建。
...为什么特别需要这个?
为什么不能使用其他系统?
进行这样的事情非常容易,并且不需要很多JS知识。 维护它很困难。
可以完成一些易于维护的工作(例如jQuery或Angular),但这是很多工作,在尝试之前,您确实必须了解JS。
第一版,得到的想法是:
function multiplyBy(n) {
return function(arg) {
return n * arg;
};
}
var multiplyByFive = multiplyBy(5);
console.log(multiplyByFive(10)); // Outputs 50
换句话说,函数只是值,通过在其名称(引用)之后粘贴()
调用。
第二版,基本上也是模块模式,返回一个对象,其成员是函数:
function operandIs(n) {
return {
multiply: function(arg) { return arg * n; },
divide: function(arg) { return arg / 10; }
}
}
var by10 = operandIs(10);
console.log(by10.multiply(10)); // Outputs 100
console.log(by10.divide(10)); // Outputs 1
进一步考虑:您还可以使用原型方法等返回新函数。
您只需要从函数返回对象。
function thats() {
return {
how: function () {
return {
it: function () {
return {
works: function () {
console.log("that's how it works!");
}
};
}
};
}
};
}
thats().how().it().works();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.