用于存储不符合预期的对象的原型

时间:2013-11-01 15:11:30

标签: javascript

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

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'。是不是可以将原型定义为对象?

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:1)

prototype属性仅适用于构造函数(小提琴: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