Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBScript可以向JScript这样的对象添加属性吗?_Vbscript - Fatal编程技术网

VBScript可以向JScript这样的对象添加属性吗?

VBScript可以向JScript这样的对象添加属性吗?,vbscript,Vbscript,我正在使用Windows脚本主机VBScript,我很好奇VBScript是否能够像JScript那样添加/删除属性 例如: var global=this; var测试=函数(){ if(全局中的“问候语”){ WScript.echo( “全局具有名为greeting的属性,其值为:”+ global.greeting+ '.' ); }否则{ echo('global没有名为greeting'的属性); } }; test(); global.greeting='Hello,World!'

我正在使用Windows脚本主机VBScript,我很好奇VBScript是否能够像JScript那样添加/删除属性

例如:

var global=this;
var测试=函数(){
if(全局中的“问候语”){
WScript.echo(
“全局具有名为greeting的属性,其值为:”+
global.greeting+
'.'
);
}否则{
echo('global没有名为greeting'的属性);
}
};
test();
global.greeting='Hello,World!';
test();
删除global.greeting;
test();
这段代码确定了全局范围(JScript没有全局范围的初始访问权限,比如浏览器中的窗口或Node.js中的全局,所以我必须自己找到它)

test()
函数检查全局对象是否有名为“greeting”的键,并将其当前状态报告为输出

代码执行初始测试以显示全局对象没有问候语键,然后设置问候语属性,然后执行第二个测试以显示问候语键已添加到全局对象。在此之后,将删除greeting属性,并运行第三个测试以显示该键不再是全局对象的一部分

这是否可以在VBScript中复制


我知道VBScript有
Scripting.Dictionary
对象,可以用来存储这些信息,但我很好奇是否有办法在VBScript中用新属性钩住现有对象并删除这些属性,或者VBScript与JScript的
{}没有并行性
构造而不是
脚本编写.字典
或类(其属性是不可变的)。

您的特定示例可以用以下内容进行模拟:

Set global=CreateObject(“Scripting.Dictionary”)
子测试
如果存在global.greeting(“问候”),则
Echo“全局具有名为greeting的属性,其值:&”_
全球的(“问候”)和“.”
其他的
Echo“全局没有名为greeting的属性。”
如果结束
端接头
测试
全球(“问候”)=“你好,世界!”
测试
全局删除(“问候语”)
测试
但一般来说,VBScript不支持修补对象,甚至不支持常规继承。扩展类的最佳方法是将其包装在自己的类中:

Class-MyClass
私有嵌套_
公共子类
Set-nested=CreateObject(“Some.Other.Class”)
端接头
公共函数Foo(val)的包装方法
Foo=嵌套的_uo.Foo(val)
端接头
公共功能条(val)的修补方法
x=嵌套的螺纹棒(val)
Bar=x*42
端接头
末级

您的特定示例可以通过以下方式进行模拟:

Set global=CreateObject(“Scripting.Dictionary”)
子测试
如果存在global.greeting(“问候”),则
Echo“全局具有名为greeting的属性,其值:&”_
全球的(“问候”)和“.”
其他的
Echo“全局没有名为greeting的属性。”
如果结束
端接头
测试
全球(“问候”)=“你好,世界!”
测试
全局删除(“问候语”)
测试
但一般来说,VBScript不支持修补对象,甚至不支持常规继承。扩展类的最佳方法是将其包装在自己的类中:

Class-MyClass
私有嵌套_
公共子类
Set-nested=CreateObject(“Some.Other.Class”)
端接头
公共函数Foo(val)的包装方法
Foo=嵌套的_uo.Foo(val)
端接头
公共功能条(val)的修补方法
x=嵌套的螺纹棒(val)
Bar=x*42
端接头
末级

Ok。这是有道理的。VBScript使用类似simula的对象模型,而JScript使用类似smalltalk的对象模型。VBScript对象有严格的接口,没有原型。JScript对象是字典,JScript不将函数视为动词,因此允许将它们自然地添加到映射中,而在vbscript中将函数/子函数指定给变量则很奇怪(较新的VB有委托,但它们仍然是非常严格的类型,而JScript不关心函数的输入/输出以作为回调传递).Delegate Explaution.Ok。这很有意义。VBScript使用类似simula的对象模型,而JScript使用类似smalltalk的对象模型。VBScript对象有严格的接口,没有原型。JScript对象是字典,JScript不将函数视为动词,因此允许它们自然添加到映射中,而分配一个函数/sub到vbscript中的变量(较新的VB有委托,但它们的类型仍然非常严格,而JScript不关心函数的输入/输出以将其作为回调传递)。合理的解释。