有人可以解释我的财产范围吗。哈希

时间:2014-04-15 13:02:12

标签: javascript scope

我不明白为什么当我打电话时这个新的_AutoInit();的console.log(_pear());我得到了未定义但是当我像这样调用_AutoInit();的console.log(_pear());我知道了吗?

var _AutoInit = function()
{

    this.Hash = '?';
};
var _pear = function() {
        return this.Hash;
};
 new _AutoInit();
 console.log(_pear())
///////////////////////////
_AutoInit();
console.log(_pear());

1 个答案:

答案 0 :(得分:0)

如果没有new,则this内的_AutoInitwindow,因此您已完成

window.Hash = '?';

现在位于_pearthis此处为window(或未定义),所以

return window.Hash; // returns "?"

并记录日志?


您可能想要设置继承,所以像这样

var _AutoInit = function () {
    this.Hash = '?';
};
_AutoInit.prototype._pear = function () {
        return this.Hash;
};
// then
var a = new _AutoInit();
a._pear(); // "?"