我正在尝试向我的对象文字中添加元素,而我在控制台中收到的所有内容都是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 );
}
};
答案 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( );