我正在编写一个页面,我只想在没有任何插件或框架干扰的情况下使用UI的原始JavaScript代码.
而现在我正在努力寻找一种在没有jQuery的情况下顺利滚动页面的方法.
我正在学习JavaScript,并且遇到了以下结构:
var Test = (function () {
function func1() {
//do something.....
}
function func2() {
//do something.....
}
function func3() {
//do something.....
}
return {
func1: func1,
func2: func2,
func3: func3
};
})();
Run Code Online (Sandbox Code Playgroud)
我想知道返回块正在做什么.这是一个非常常用的JavaScript结构吗?请告诉我在哪里可以获得更多相关信息.
在JavaScript中,看到自调用函数并不罕见:
var i = (function(x) {
return x;
})(42);
// i == 42
Run Code Online (Sandbox Code Playgroud)
虽然我当然没有比较这些语言,但我认为这样的构造可以翻译成C#,只要提供支持的语言版本:
var i = (delegate(int x) {
return x;
})(42);
Run Code Online (Sandbox Code Playgroud)
要么:
var i = ((x) => {
return x;
})(42);
Run Code Online (Sandbox Code Playgroud)
甚至:
var i = (x => x)(42);
Run Code Online (Sandbox Code Playgroud)
但是,每个版本都有错误:
预期的方法名称
自调用匿名方法是否不受支持(由于显式禁止或类型推断不可能),或者我的尝试中是否存在错误?
我冒昧地猜测,因为没有方法声明(Func<T,T>)可以推断出类型,它无法理清隐含的类型,我打算通过名称调用声明的方法,并且真正搞砸了语法.
勘误表
在此问题充斥之前:
var i = new Func<int, int>(x => x)(42);
Run Code Online (Sandbox Code Playgroud)
我应该说我希望利用类型推断,但我认为由于过于隐蔽而可能无法实现.
所以,澄清一下这个问题; 我们知道我们可以var i = new Func<int, int>(x => x)(42);但是如果没有创建实例,或者转换为Func,这可能吗?
用例
对于那些好奇(或有关)的用例是这样的:
var o …Run Code Online (Sandbox Code Playgroud) c# anonymous-methods anonymous-function self-invoking-function
在过去,我使用了揭示模块模式.
function myModule() {
function foo() ...
function bar() ...
return {
foo: foo,
bar: bar
};
}
Run Code Online (Sandbox Code Playgroud)
使用ES6,这可以通过对象速记得到改进.
function myModule() {
function foo() ...
function bar() ...
return { foo, bar };
}
Run Code Online (Sandbox Code Playgroud)
现在有了内置的模块语法,我很难找到与上面最相似的首选模式.
选项#1命名为exports
// export file
function foo() ...
function bar() ...
export { foo, bar };
// import file
import { foo, bar } from './export-file';
foo();
bar();
Run Code Online (Sandbox Code Playgroud)
选项#2默认导出/导入与解构
// export file
function foo() ...
function bar() ...
export default { foo, bar }; …Run Code Online (Sandbox Code Playgroud) 这种模式的缺点是,如果私有函数引用公共函数,则如果需要补丁,则不能覆盖该公共函数.这是因为私有函数将继续引用私有实现,并且该模式不适用于公共成员,仅适用于函数.
有没有人举例说明他的意思?
我试图了解这个AngularJS工厂方法的返回部分的目的是什么意思?
return {
getMessages: getMessages
};
Run Code Online (Sandbox Code Playgroud)
如果我们向这个名为getAnotherMessage()的工厂添加了一个新方法会发生什么,我们是否需要更新这个返回段?
myModule.factory('HelloWorld', function($q, $timeout) {
var getMessages = function() {
var deferred = $q.defer();
$timeout(function() {
deferred.resolve(['Hello', 'world!']);
}, 2000);
return deferred.promise;
};
return {
getMessages: getMessages
};
});
Run Code Online (Sandbox Code Playgroud) 我正在尝试重构一些javascript,我对模块模式感到困惑.
我现在的一种方法是简单地声明一个包含所有组件功能的类
var Foo = function(){
this.Bar = {};
...
}
Run Code Online (Sandbox Code Playgroud)
并创建一个在组件中使用的新实例.但我也读过有关模块模式的内容,我看不出与我所拥有的相比有什么好处,因为它似乎只是以更复杂的方式做同样的事情.也许我只是没有遇到过使它成为更好选择的情况.例如,这样的模式:
var module = (function () {
// private variables and functions
var foo = 'bar';
// constructor
var module = function () {
};
// prototype
module.prototype = {
constructor: module,
something: function () {
}
};
// return module
return module;
})();
var my_module = new module();
Run Code Online (Sandbox Code Playgroud)
与我已经拥有的东西没有明显不同.这种模式让我做了什么,我不能做其他方式?
我正在尝试为某些东西创建自己的插件,但是在第一步时遇到了问题。我想要一个可以将参数作为默认值并在其中包含其他功能的对象。请查看下面的示例,了解我正在尝试完成的工作。
var a = function(str) { console.info(str); }
a = {
Test: function() { console.info(TestMessage()); },
TestMessage: function() { return "Test Message"; }
}
Run Code Online (Sandbox Code Playgroud)
基本上,我想要我可以使用参数自行调用的父对象。一个测试”); 同时,我希望该父对象中的其他函数也可以访问该对象中的其他函数。a.Test() -> 调用 a.TestMessage(),但是,不必写“a”。每次在该对象内部时。
TypeScript是不是为类使用了揭示模块模式?我期望这段代码有不同的结果.
class Test {
private privateProperty: any;
public publicProperty: any;
}
Run Code Online (Sandbox Code Playgroud)
生成这个:
var Test = (function () {
function Test() { }
return Test;
})();
Run Code Online (Sandbox Code Playgroud)
我期待这样的事情:
var test = (function(){
var privateProperty;
var publicProperty;
return {
publicProperty: publicProperty;
};
})();
Run Code Online (Sandbox Code Playgroud) 我的超长文件(main.js)按原样工作正常。但我想将处理“y”的函数分成一个单独的文件进行组织。在 PHP 中,我将使用 require('yfunctions.php') 并完成它。
javascript 中是否有不需要重写函数调用的等效项?
main.js:
// do stuff
function first(x){
// do stuff with x
}
function second(y){
// do stuff to y
// return y
}
function third(y){
// do stuff with y
}
Run Code Online (Sandbox Code Playgroud)
最终变成:
main.js:
require('yfunctions.js');
// do stuff
function first(x){
// do stuff with x
}
Run Code Online (Sandbox Code Playgroud)
yfunctions.js:
function second(y){
// do stuff to y
// return y
}
function third(y){
// do stuff with y
}
Run Code Online (Sandbox Code Playgroud)
上面的方法不起作用(看起来)。我是否必须向 yfunctions.js 中的每个函数添加“导出”声明?有没有办法说“将此文件中的每个函数导出为函数?”
(注意,我正在使用 Node.js / Electron ...但我很好奇有关 …