gpt4 book ai didi

javascript - JS实例名作为参数

转载 作者:行者123 更新时间:2023-11-30 00:23:32 26 4
gpt4 key购买 nike

有没有一种方法可以调用将调用类构造函数的函数,并为其提供调用中提供的参数,尤其是实例名称?

最重要的是我要传递我要创建的实例的名称。

换句话说,有没有办法让这个工作:

function instantiationOfSomething(instanceName, param1, param2, param3) {               
instanceName = new mySomethingClass({
...
});
}

//call #1
instantiationOfSomething("circle", 2, 8, 87);

//call #2
instantiationOfSomething("ellipse", 2, 85, 87);

我没有任何可能对构造函数进行操作,例如instantiationOfSomething(...) 不是我的代码的一部分,而是 API 的一部分。

这是一个真实的代码示例(Google Maps API v3):

makeMarker("markerName1", latlng1, "label1", "Title1");
makeMarker("markerName2", latlng2, "label2", "Title2");

function makeMarker (name, latlng, label, title) {

//here is the tricky part
instanceName = new google.maps.Marker({
position: latlng,
map: map,
label: label,
draggable: true,
title: title
});
}

最佳答案

简单回答

function createVariable(name, value)
{
window[name] = value;
}

// Usage:
createVariable("x", 5);
console.log(x === 5); // true

解释

有一个术语 context在 JavaScript 中。当您访问变量 variableName 时,您实际上是在访问当前上下文中的 variableName 属性。

浏览器中的默认上下文是 window 对象。因此,实际上,默认(外部)上下文中的这些语句是相同的:

var variableName = "Hello World";

document.body.innerHTML += variableName + "<br/>";
document.body.innerHTML += this.variableName + "<br/>";
document.body.innerHTML += window.variableName + "<br/>";

在 JavaScript 中,谈论对象 property accessing ,您可以同时使用点符号或括号符号:

var variableName = {
propertyName: "Hello World"
};

document.body.innerHTML += variableName.propertyName + "<br/>";
document.body.innerHTML += variableName['propertyName'] + "<br/>";

但是,最后一个允许使用不能与点符号一起使用的字符,例如空格。此外,它还允许动态名称。

结合以上所有内容,您可以通过分配默认 window 上下文的属性轻松地实例化具有动态名称的变量:

function createVariable(name, value)
{
window[name] = value;
}

createVariable('stackoverflow', 'Hello World');
document.body.innerHTML = stackoverflow;

例如,如果是marker,可以这样做:

function makeMarker (name, latlng, label, title) {
// not that tricky part anymore
window[name] = new google.maps.Marker({
position: latlng,
map: map,
label: label,
draggable: true,
title: title
});
}

关于javascript - JS实例名作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32278211/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com