我想在原型链上创建一个设置对象,作为我的应用程序的查找。我试过这个:
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'。是不是可以将原型定义为对象?
答案 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