首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否有可能获得变量声明范围的名称?

是否有可能获得变量声明范围的名称?
EN

Stack Overflow用户
提问于 2014-07-15 10:41:31
回答 1查看 44关注 0票数 0

我在JavaScript代码的某个地方有一个变量。现在,我想获得声明该变量的函数的名称(也称为作用域)。因此,例如,如果该变量是一个oject的字段,我希望得到对象类型的名称。

考虑以下代码:

代码语言:javascript
复制
function MyClass() {
  this.name = "MyName";
  this.age = 20;
}

var myVariable = new window.MyClass();
alert(getDeclaringScope(myVariable)) // should alert 'window'
alert(getDeclaringScope(myVariable.name)) // should alert 'MyClass

有任何方法来实现getDeclaringScope函数吗?

更新

我想使用这样的技术来访问一种“静态”变量,其中元信息存储在可以观察到的层次上。一个非常简化的例子:

代码语言:javascript
复制
var META = {};
META["MyClass"] = {};
META["MyClass"]["MyArray"] = { ElementType: "MyOtherClass" };

function MyClass() {
  this.MyArray = ko.observableArray();
}
function MyOtherClass() {
  this.name = "a";
}

ko.observableArray.fn.addFromPlainObjects = function(plainItems) {
  var elemType = .... here I wanted to get "MyOtherClass" from the META global variable
  // create MyOtherClass and map the plain items to it... etc.
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-15 10:54:45

不是的。

对象具有对其构造函数的引用,但是可以从许多对象引用构造函数,而不仅仅是window。可以使用变量(相对于属性)直接访问它:

代码语言:javascript
复制
var MyClass = window.MyClass;
var foo = new MyClass();

可以在对象模型中显式创建回引用,因为构造函数是对象.

代码语言:javascript
复制
window.MyClass.backref = window;

虽然这很可能不是你想要的。我怀疑您对变量的作用域有误解;变量作用域与对象属性无关。因此,没有“声明作用域”的概念来表示从其中检索变量引用的对象和对象属性,就像您似乎将其概念化一样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24756096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档