Javascript Object Literal,无法设置属性

时间:2014-09-24 08:04:21

标签: javascript object-literal

我正在尝试向我的对象文字中添加元素,而我在控制台中收到的所有内容都是undefined

为什么将itemSize打印为undefined,以及为什么我试图设置的所有属性也都是未定义的。我必须在这里错过一些大事。

我也不了解get testFunction的目的以及它是如何被访问的,因为它似乎没有跟随函数名后面有冒号的其他函数的签名。

我此刻很困惑。

的index.html

var square = new GULE.Scene();
square.hey( 5 );

gule.js

 var GULE = GULE || {};

 GULE.Scene = function ( itemSize ) {

  this.itemSize = itemSize;
  console.log( "Trying in constructor: " + this.itemSize );
  console.log( "Passed variable: " + itemSize );

 };

 GULE.Scene.prototype = {

      constructor: GULE.Scene,
      stuff: 1,
      get testFunction () {
            console.log( "testFunction!" );
          },
      add: function () {
              this.stuff += 1;
            },
      hey: function () {
              console.log( this.stuff );
              console.log( "Trying in function: " + this.itemSize );
           }
 };

2 个答案:

答案 0 :(得分:3)

  

为什么itemSize被打印为未定义...?

因为您没有将任何内容传递到Scene构造函数中,所以参数为undefined,这是您分配给itemSize的内容。

  

get testFunction ......的目的是什么?

它创建了一个名为testFunction的属性,当访问它时,它会调用一个函数;请参阅规范的§11.1.5。这是ES5功能。如果打开您的网络控制台,然后在创建square后执行此操作:

var x = square.testFunction;

...你会看到“testFunction!”在控制台中,因为您访问了该属性。

当您阅读undefined时看到testFunction的原因是,getter定义的函数不会返回任何内容。

这是一个更清晰的例子:

(function() {
  "use strict";
  
  var obj = (function() {
    var propValue = "Initial value";
    
    return {
      normalProp: 42,
      get accessorProp() {
        display("Reading accessorProp");
        return propValue;
      },
      set accessorProp(value) {
        display("Writing accessorProp, new value: " + value);
        propValue = value;
      }
    };
  })();
  
  display("normalProp is " + obj.normalProp);
  display("accessorProp is " + obj.accessorProp);
  obj.accessorProp = "Testing";
  display("accessorProp is now " + obj.accessorProp);

  function display(msg) {
    var p = document.createElement("p");
    p.innerHTML = String(msg);
    document.body.appendChild(p);
  }
})();

答案 1 :(得分:0)

正确的代码应该是 - var square = new GULE.Scene(5); square.hey( );