javascript原型var未定义,但我不确定原因。

时间:2016-05-19 18:00:53

标签: javascript

我以为我是#34;得到它"用javascript,然后我遇到这样的事情。我不知道为什么__sfcont的值未定义。

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);  

此预期结果为It contains a div block and a label.但我得到undefinedand a label.

3 个答案:

答案 0 :(得分:6)

this.__sfcont + "and a label.",执行时,this不是您所期望的。它尚未构建searchingFor,而是myObject.prototype = { ... }正在执行的上下文。该上下文没有__sfcont属性。

使label(以及dropdown)方法:

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:2)

您也可以使用getter

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

console.log(myObject.searchingFor.label)