0

我想在原型链上创建一个设置对象,作为我的应用程序的查找。我试过这个:

http://jsfiddle.net/7kwXd/3/

var d9l = {};

d9l.aMethod = function() {
    //fails here with Cannot read property 'dimension1' of undefined 
    alert(this.anObject.dimension1);
};

d9l.aMethod.prototype.anObject = {
   dimension1 : "x1",
   dimension2 : "y1"
};

var testing = d9l.aMethod();

但我只是在构造函数中无法读取未定义的属性'dimension1' 。不能将原型定义为对象吗?

4

2 回答 2

2

因为d9l它不是一个构造对象,所以它的方法并不this像您所期望的那样引用。为了验证,试着alert(this)看看你得到了什么。

要修复,请执行以下操作:

function d9l() {}
d9l.prototype.aMethod = function() {
    alert(this.anObject.dimension1);
};
d9l.prototype.anObject = {
    dimension1: "x1",
    dimension2: "y1"
};
var testing = (new d9l()).aMethod();
于 2013-11-01T15:14:55.793 回答
1

原型属性仅适用于构造函数(小提琴:http: //jsfiddle.net/7kwXd/2/):

var Ctor = function(){
}

Ctor.prototype = {
    aMethod:function(){
        alert(this.anObject.dimension1);
    },
    anObject:{
        dimension1 : "x1",
        dimension2 : "y1"
    }
}


var d9l = new Ctor();

var testing = d9l.aMethod();

这是一篇关于 protos 如何工作的非常好的文章:http: //msdn.microsoft.com/en-us/magazine/ff852808.aspx

于 2013-11-01T15:17:41.553 回答