作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有没有一种方法可以调用将调用类构造函数的函数,并为其提供调用中提供的参数,尤其是实例名称?
最重要的是我要传递我要创建的实例的名称。
换句话说,有没有办法让这个工作:
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/
我是一名优秀的程序员,十分优秀!