如何使用JavaScript中的ActiveXObject 对象
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用JavaScript中的ActiveXObject 对象相关的知识,希望对你有一定的参考价值。
使用javascript中的ActiveXObject 对象方法:语法
newObj = new ActiveXObject(servername.typename[, location])
参数
newObj:必选。 ActiveXObject 分配到的变量名称。
servername:必选。 提供对象的应用程序的名称。
typename :必选。 要创建的对象的类型或类。
location:可选。 要在其中创建对象的网络服务器的名称。
备注
自动化服务器至少提供一种对象。 例如,字处理应用程序可能会提供应用程序对象、文档对象和工具栏对象。
你可以在 HKEY_CLASSES_ROOT 注册表项中标识宿主 PC 上的 servername.typename 值。 例如,下面是可在此处找到的几个值示例,具体取决于安装的程序:
Excel.Application
Excel.Chart
Scripting.FileSystemObject
WScript.Shell
Word.Document
要求
在以下文档模式中受支持:Quirks、Internet Explorer 6 标准、Internet Explorer 7 标准、Internet Explorer 8 标准、Internet Explorer 9 标准、Internet Explorer 10 标准和 Internet Explorer 11 标准。 在 Windows 8.x 应用商店应用中不受支持。 请参见JavaScript 版本信息。
应用相关方法
创建对象实例后,就可以使用对象的相关方法了。比如,使用CreateTextFile方法创建一个文本文件:var fso = new ActiveXObject(“Scripting.FileSystemObject”);var f1 = fso.createtextfile(“c:\\myjstest.txt”,true”); 参考技术A newObj = new ActiveXObject(servername.typename[, location])
newObj:保存创建的ActiveXObject对象的引用的变量
servername:提供ActiveXObject对象的应用程序的名字
typename: ActiveXObject对象的type或者class
location:可选,要在其上创建ActiveXObject对象的服务器名
例子:
<html>
<body>
<script type="text/javascript">
var ExcelSheet;
ExcelApp = new ActiveXObject("Excel.Application");
ExcelSheet = new ActiveXObject("Excel.Sheet");
ExcelSheet.Application.Visible = true;
ExcelSheet.ActiveSheet.Cells(1,1).Value = "This is column A, row 1";
ExcelSheet.SaveAs("D:\\TEST.XLS");
ExcelSheet.Application.Quit();
</script>
</body>
</html>
如何使用 JavaScript 中的三元运算符更改函数中的 if else 语句?
【中文标题】如何使用 JavaScript 中的三元运算符更改函数中的 if else 语句?【英文标题】:How can I change the if else statement in the function with Ternary operator in JavaScript? 【发布时间】:2021-02-06 14:37:37 【问题描述】:如何在 JavaScript 中使用三元运算符更改函数中的 if else 语句
private getProductName(productType: string): string
let productName = 'Product not found';
if(this.deal.packages.find(p => p.isSelected).dealProducts.find(dp => (dp.children.length > 0 && dp.children[0].product.productTypeCode == productType)))
productName = this.deal.packages.find(p => p.isSelected).dealProducts.find(dp => (dp.children.length > 0 && dp.children[0].product.productTypeCode == productType)).children[0].product.name;
else if(this.deal.packages.find(p => p.isSelected).dealProducts.find(dp => (dp.children.length === 0 && dp.product.productTypeCode === productType)))
productName = this.deal.packages.find(p => p.isSelected).dealProducts.find(dp => (dp.children.length === 0 && dp.product.productTypeCode === productType)).product.name;
return productName;
【问题讨论】:
看起来很奇怪的 JavaScript 也许 OP 首先希望通过将一些重复访问的引用分配给变量/常量来为代码提供可读性。然后用三元表达式替换 if-else 子句也容易得多。 所以代码不可读,你想进一步降低可读性吗?我说对了吗? 为了改进您的代码,我建议:拥有可读的代码比拥有极其紧凑的代码更有价值。还要打破你的长代码行。创建命名变量而不是长 if 子句或将它们提取到“isFooBar* 方法。从“productName =”旁边的代码中提取方法。修复顶部的方法拼写。毕竟,引入三元运算符应该很容易。作为提示:阅读 Bobs 叔叔的书清洁代码。 @nologin 这是你的意见。有人可以在白板上写一本书,擦除整个内容并重写它以修复一个错字。或者有人可以从一开始就对其进行优化,而不是擦除整个白板。上面的代码基本上找到了说它存在的对象。然后它会扔掉它以再次找到它。这不是最好的逻辑。给出如何更好地构建代码的想法是一个答案。很抱歉你对此没有强烈的感觉。有时一个人要求一些东西,但最终那东西并不是 OP 真正需要的。 【参考方案1】:代码效率很低,因为你找到了那个东西,然后你又转身又找到了那个东西。所以你最终会循环多次。
为了使其更具可读性,我将其分成几部分。它还在对象上循环一次以定位有子项和没有子项的项。那里有一个三元运算符可以处理有无。
然后代码确定它是否是孩子并抓取对象。
// Grab the package
var selectedPackageProducts = this.deal.packages.find(p => p.isSelected).dealProducts;
// check to see if the children has the product type or if the parent does (if no children)
const selectedProduct = selectedPackageProducts.find(dp =>
dp.children.length > 0 ?
dp.children[0].product.productTypeCode === productType :
dp.product.productTypeCode === productType)
// If we have children use it, else reference the parent
const productObj = selectedProduct && selectedProduct.children.length ?
selectedProduct.children[0] :
selectedProduct;
// get the product name
const productName = productObj && productObj.product.name
【讨论】:
您在 else 部分错过了 dp.children.length === 0,请注意我在 if 语句和 else 语句中得到的 product.name 不同。 @KarimAli 嗯,如果孩子们 > 0.... 在三元组的 else 部分,孩子们将是零 稍作改动以引用孩子【参考方案2】:为了证明两件事,我将自己置于危险之中,进入了同时似乎是意见纷争的战场。
追求简洁的代码和可读性并不总是为了传教士或“我比你更了解”的态度。这主要是为了自己(以及团队中的一个人)的和平与健康,尤其是为了那些必须在不久之后甚至之后维护此类代码的人。
通过将 OP 的代码重构为可读性,可以实现三件事:
private getProductName(productType: string): string
const defaultProductName = 'Product not found';
const selectedPackageProductList = this.deal.packages
.find(p => p.isSelected).dealProducts;
const selectedProducts = selectedPackageProductList
.find(dp => (dp.children.length > 0 && dp.children[0].product.productTypeCode === productType));
const selectedProductItem = !selectedProducts && selectedPackageProductList
.find(dp => (dp.children.length === 0 && dp.product.productTypeCode === productType));
return selectedProducts
? selectedProducts.children[0].product.name
: (selectedProductItem ? selectedProductItem.product.name : defaultProductName);
【讨论】:
我唯一想改变的是跳过三元组,在 selectedProductItem 之前添加 if ......如果你已经找到了,为什么 selectedProductItem 循环? @epascarello ... 保留 三元组 我想满足问题的要求并取悦 OP 和 nologin。关于建议的改进,selectedProductItem
被计算以防selectedProducts
不存在(有一个保护)。这也是可以按照 OP 的要求写入最终返回值的原因。此时只需检索产品名称。
正如我在帖子下的评论中所做的那样,有时 OP 所要求的并不是他们真正需要的。 ;) 但是通过编辑,它会做同样的事情。
我在这里使用 Original Poster 已有 12 年了,我不打算改变。
追求干净的代码是一件好事。但它没有回答这个问题。【参考方案3】:
而不是写:
IF condition THEN do_a ELSE do_b
你可以用同样的方式使用三元运算符。
(condition) ? do_a : do_b;
具体为您的示例:
private getProductName(productType: string): string
return (this.deal.packages.find(p => p.isSelected).dealProducts.find(dp => (dp.children.length > 0 && dp.children[0].product.productTypeCode == productType)))
? this.deal.packages.find(p => p.isSelected).dealProducts.find(dp => (dp.children.length > 0 && dp.children[0].product.productTypeCode == productType)).children[0].product.name;
: (this.deal.packages.find(p => p.isSelected).dealProducts.find(dp => (dp.children.length === 0 && dp.product.productTypeCode === productType)))
? this.deal.packages.find(p => p.isSelected).dealProducts.find(dp => (dp.children.length === 0 && dp.product.productTypeCode === productType)).product.name;
: 'Product not found';
顺便说一句。我建议为do_a
或do_b
提取方法。
【讨论】:
为什么要重复 OP 根本不可读的示例代码? 因为它是具体问题的具体解决方案。 如果是我向我的团队成员提供这样的代码,我会请求立即更改这个不可读的(单行)代码。 这不是问题 问题是有很多更好的方法来回答它,而无需一遍又一遍地重复代码。代码效率很低。以上是关于如何使用JavaScript中的ActiveXObject 对象的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 javascript 中的 mouseover 事件删除我在 javascript 中创建的 DOM 节点?
如何使用 JavaScript 中的三元运算符更改函数中的 if else 语句?
如何使用 JavaScript 删除 iFrame 中的 HTML 元素