javascript原型变量未定义,但I';我不知道为什么。

javascript原型变量未定义,但I';我不知道为什么。,javascript,Javascript,我以为我是在用javascript“理解”它,然后我遇到了这样的事情。我不知道为什么uu sfont的值没有定义 var __container = "It contains "; function myObject() { var temp = 'temp'; } myObject.prototype = { constructor: myObject, searchingFor: { __sfcont: "a div block ", label: this.

我以为我是在用javascript“理解”它,然后我遇到了这样的事情。我不知道为什么uu sfont的值没有定义

var __container = "It contains ";

function myObject() {
  var temp = 'temp';
}

myObject.prototype = {
  constructor: myObject,
  searchingFor: {
    __sfcont: "a div block ",
    label: this.__sfcont + "and a label.",
    dropdown: this.__sfcont + "and a dropdown."
  }
};

var myObj = new myObject();

console.log(myObj.searchingFor.label);  

这样做的预期结果是
它包含一个div块和一个标签。
但我得到了
未定义和一个标签。

初始化时无法访问对象属性。您可以定义变量,然后重新使用它:

var __sfcont = "a div block ";
myObject.prototype = {
  constructor: myObject,
  searchingFor: {
    __sfcont: __sfcont,
    label: __sfcont + "and a label.",
    dropdown: __sfcont + "and a dropdown."
  }
};

初始化时无法访问对象属性。您可以定义变量,然后重新使用它:

var __sfcont = "a div block ";
myObject.prototype = {
  constructor: myObject,
  searchingFor: {
    __sfcont: __sfcont,
    label: __sfcont + "and a label.",
    dropdown: __sfcont + "and a dropdown."
  }
};

在执行
this.\uu sfcont+”和一个label.,
时,
不是您所期望的。它不是尚未构造的
搜索
,而是执行
myObject.prototype={…}
的上下文。该上下文没有
\u sfcont
属性

标签
(以及
下拉列表
)作为一种方法:

label: function() { this.__sfcont + "and a label."; },
...

console.log(myObj.searchingFor.label());  

在执行
this.\uu sfcont+”和一个label.,
时,
不是您所期望的。它不是尚未构造的
搜索
,而是执行
myObject.prototype={…}
的上下文。该上下文没有
\u sfcont
属性

标签
(以及
下拉列表
)作为一种方法:

label: function() { this.__sfcont + "and a label."; },
...

console.log(myObj.searchingFor.label());  

你也可以用吸气剂

myObject.prototype = {
  constructor: myObject,
  searchingFor: {
    __sfcont: "a div block ",
    get label() {
      return this.__sfcont + "and a label"
    }
  }
};

console.log(myObject.searchingFor.label)

你也可以用吸气剂

myObject.prototype = {
  constructor: myObject,
  searchingFor: {
    __sfcont: "a div block ",
    get label() {
      return this.__sfcont + "and a label"
    }
  }
};

console.log(myObject.searchingFor.label)

尝试使用
label:this.toString()
进行测试,并查看您得到了什么。您没有在任何地方分配
\uu容器
。这可能会令人困惑,因为您通常可以通过跟踪上下文到最近的父范围来跟踪其含义。我认为眼睛会查找最近的大括号以找到最近的父作用域,但在这种情况下,大括号用于声明对象文字,而不是作用域。@sdgluck啊,是的。一个疏忽尝试使用
label:this.toString()
进行测试,并查看您得到了什么。您没有在任何地方分配
\uu容器
。这可能会令人困惑,因为您通常可以通过跟踪上下文到最近的父范围来跟踪其含义。我认为眼睛会查找最近的大括号以找到最近的父作用域,但在这种情况下,大括号用于声明对象文字,而不是作用域。@sdgluck啊,是的。一个疏忽哦,对了!谢谢正如sdgluck提到的,我忘记在我的示例代码中使用_容器。现在我有了
sfcontainer+“一个div块”、
label:function(){返回这个.\uu sfcont+”和一个label.;},
然后就达到了预期的结果。哦,对了!谢谢正如sdgluck提到的,我忘记在我的示例代码中使用_容器。因此,现在我有了
sfcontainer+“一个div块”、
label:function(){返回这个.\uu sfcont+”和一个label.;},
然后实现了预期的结果。