我目前正在从Java转换为Javascript,我有点难以弄清楚如何按照我希望的方式扩展对象.
我见过互联网上有几个人使用一种名为extend on object的方法.代码如下所示:
var Person = {
name : 'Blank',
age : 22
}
var Robot = Person.extend({
name : 'Robo',
age : 4
)}
var robot = new Robot();
alert(robot.name); //Should return 'Robo'
Run Code Online (Sandbox Code Playgroud)
有谁知道如何使这项工作?我听说你需要写
Object.prototype.extend = function(...);
Run Code Online (Sandbox Code Playgroud)
但我不知道如何使这个系统工作.如果不可能,请告诉我另一个扩展对象的替代方案.
我正在寻找一个关于这个的伎俩.我知道如何在Javascript中调用动态的任意函数,传递特定的参数,如下所示:
function mainfunc(func, par1, par2){
window[func](par1, par2);
}
function calledfunc(par1, par2){
// Do stuff here
}
mainfunc('calledfunc', 'hello', 'bye');
Run Code Online (Sandbox Code Playgroud)
我知道如何在mainfunc中使用arguments []集合传递可选的无限参数,但是,我无法想象如何向mainfunc发送任意数量的参数以动态发送到calledfunc ; 我怎么能完成这样的事情,但有任意数量的可选参数(不使用丑陋的if-else)?:
function mainfunc(func){
if(arguments.length == 3)
window[func](arguments[1], arguments[2]);
else if(arguments.length == 4)
window[func](arguments[1], arguments[2], arguments[3]);
else if(arguments.length == 5)
window[func](arguments[1], arguments[2], arguments[3], arguments[4]);
}
function calledfunc1(par1, par2){
// Do stuff here
}
function calledfunc2(par1, par2, par3){
// Do stuff here
}
mainfunc('calledfunc1', 'hello', 'bye');
mainfunc('calledfunc2', 'hello', 'bye', 'goodbye');
Run Code Online (Sandbox Code Playgroud) 我有一个JavaScript变量,其中包含JavaScript函数的名称.通过使用$ .ajax等加载和放置页面上存在此函数.
谁能告诉我如何调用变量中命名的javascript函数,好吗?
函数的名称位于变量中,因为用于加载页面片段的URL(插入到当前页面中)包含要调用的函数的名称.
我对如何实施此解决方案的其他建议持开放态度.
在创建具有多个参数的JavaScript函数时,我总是面临这样的选择:传递参数列表与传递选项对象.
例如,我正在编写一个函数来将nodeList映射到数组:
function map(nodeList, callback, thisObject, fromIndex, toIndex){
...
}
Run Code Online (Sandbox Code Playgroud)
我可以改用它:
function map(options){
...
}
Run Code Online (Sandbox Code Playgroud)
options是一个对象:
options={
nodeList:...,
callback:...,
thisObject:...,
fromIndex:...,
toIndex:...
}
Run Code Online (Sandbox Code Playgroud)
推荐哪种方式?是否有何时使用其中一种?
[更新]似乎有一个共识支持选项对象,所以我想添加一个注释:在我的案例中我试图使用参数列表的一个原因是有一个与JavaScript一致的行为内置于array.map方法.
鉴于:
typealias Action = () -> ()
var action: Action = { }
func doStuff(stuff: String, completion: @escaping Action) {
print(stuff)
action = completion
completion()
}
func doStuffAgain() {
print("again")
action()
}
doStuff(stuff: "do stuff") {
print("swift 3!")
}
doStuffAgain()
Run Code Online (Sandbox Code Playgroud)
有没有办法制作类型的completion参数(和action)Action?并保持@escaping?
更改类型会出现以下错误:
error: @escaping attribute only applies to function types
删除@escaping属性,代码编译并运行,但似乎不正确,因为completion闭包正在逃避函数的范围.
对于一个类,我想在一个map存储std::function对象中存储一些函数指针到同一个类的成员函数.但是我在这个代码的开头就失败了:
class Foo {
public:
void doSomething() {}
void bindFunction() {
// ERROR
std::function<void(void)> f = &Foo::doSomething;
}
};
Run Code Online (Sandbox Code Playgroud)
我收到error C2064: term does not evaluate to a function taking 0 arguments的xxcallobj一些奇怪的模板实例化的错误结合.目前我正在使用Visual Studio 2010/2011在Windows 8上工作,在使用VS10的Win 7上工作也失败了.错误必须基于我不遵循的一些奇怪的C++规则.
编辑:我不使用提升.这是集成在MS编译器中的C++ 11.
我看到这在JavaScript中一直被使用:
define(['param1', 'param2'], function() {
});
Run Code Online (Sandbox Code Playgroud)
功能是什么define?
我有这个脚本:
CREATE FUNCTION dbo.CheckIfSFExists(@param1 INT, @param2 BIT = 1 )
RETURNS BIT
AS
BEGIN
IF EXISTS ( bla bla bla )
RETURN 1;
RETURN 0;
END
GO
Run Code Online (Sandbox Code Playgroud)
我想以这种方式在一个过程中使用它:
IF dbo.CheckIfSFExists( 23 ) = 0
SET @retValue = 'bla bla bla';
Run Code Online (Sandbox Code Playgroud)
但我得到错误:
为程序或函数dbo.CheckIfSFExists提供的参数数量不足.
为什么不起作用?
我试图在python中调用另一个函数内的函数,但找不到正确的语法.我想做的是这样的:
def wrapper(func, args):
func(args)
def func1(x):
print(x)
def func2(x, y, z):
return x+y+z
wrapper(func1, [x])
wrapper(func2, [x, y, z])
Run Code Online (Sandbox Code Playgroud)
在这种情况下,第一个呼叫将起作用,第二个呼叫不起作用 我想要修改的是包装函数而不是被调用的函数.
如果我有这样的BASH脚本:
#!/bin/bash
f() {
# echo function name, "f" in this case
}
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?这可以用在诸如的帮助消息中
printf "Usage: %s: blah blah blah \n" $(basename $0) >&2;
Run Code Online (Sandbox Code Playgroud)
只有在这种情况下我想要的不是$0,这是脚本的文件名.