JavaScript中有没有办法调用没有括号的函数?
例如在jQuery中:
$('#wrap').text("asdf"); 会工作,所以会 $.ajax(ajaxOptions);
我正在将函数(类)映射到window.$具有一组我希望能够使用或不使用括号调用的函数.像jQuery一样.
这是一个代码示例:
function Test(asdf) {
this.test = function(testVar) { return testVar + ' asdf'; }
}
Run Code Online (Sandbox Code Playgroud)
我映射Test()到$:
window.$ = new Test();
Run Code Online (Sandbox Code Playgroud)
我必须像这样调用函数(类):
$('asfd').test('ASDF');
Run Code Online (Sandbox Code Playgroud)
但是我希望能够像这样调用它:
$.test('asdf');
Run Code Online (Sandbox Code Playgroud)
Anu*_*rag 38
JavaScript非常灵活,因为对象基本上是一个映射,并且可以包含任意数量的键值对,其中值本身可以是一个对象,因此您可以嵌套.JavaScript的另一个有趣的方面是函数本身就是第一类对象,因此在键值对中,您可以将函数作为值.
要获得类似jQuery的东西,那么变得非常简单.你从一个函数(构造函数,或类,如果你愿意)开始,
function myFunction() {
// do some awesome web 2.0 stuff
}
Run Code Online (Sandbox Code Playgroud)
既然myfunction是一个函数,也是一个对象,所以你也可以将键值对附加到它,这就是jQuery的作用.要验证myFunction也是一个对象,请instanceof检查:
myFunction instanceof Function; // true
myFunction instanceof Object; // true
Run Code Online (Sandbox Code Playgroud)
因此,我们可以向函数添加属性,这些函数可以是简单值,也可以是函数本身.
// adding a simple property that holds a number
myFunction.firstPrime = 2;
// adding a function itself as a property to myFunction
myFunction.isPrime = function(number) {
// do some magic to determine if number is prime
};
Run Code Online (Sandbox Code Playgroud)
但如果这不是你的问题,并且你真的想知道你是否可以在不使用括号的情况下直接调用函数,那么答案是肯定的,你可以使用ECMAScript 5th ed中的附加内容.
下面是一个使用Object.defineProperty调用函数而不使用括号并将其定义为getter 的示例:
var o = {};
Object.defineProperty(o, "helloWorld", {
get: function() {
alert("hello world");
},
set: undefined
});
o.helloWorld; // will alert "hello world"
Run Code Online (Sandbox Code Playgroud)
每晚在Chrome或Safari或Firefox中试用此示例.
new您可以使用调用函数new。曲解是,在函数内部this变成了由函数构造的对象,而不是通常的构造对象。
function test () { alert('it worked'); }
...
new test; // alerts "it worked"
Run Code Online (Sandbox Code Playgroud)
call 和 apply您可以使用call或apply间接调用函数。您仍然需要括号(除非您使用new),但是您不会直接使用括号来调用函数。
function message() {return "Hello crazy world!"; }
Function.prototype.toString = function() { return this.call(this); };
alert(message);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12382 次 |
| 最近记录: |