问题:
调用(console.log(d.yakinlik.uzak.X1())
)此函数
function Div(isim) {
this.loc = document.getElementById(isim);
this.getStyle = function (stili) {
return window.getComputedStyle(this.loc).getPropertyValue(stili);
};
this.getIntStyle = function (stili) {
return parseInt(this.getStyle(stili), 10);
};
this.yakinlik = {
uzak: {
X1: function () {
return this.getIntStyle('left');
}
}
};
}
给出
未捕获的TypeError:this.getIntStyle不是函数
我尝试过使用:
this.yakinlik = {
uzak: {
},
orta: {
},
yakin: {
},
cokyakin: {
}
};
this.yakinlik.uzak.X1 = function () { return this.getIntStyle('left'); };
但也失败了。但是当我不使用这里this.yakinlik.uzak.X1 = function () { return this.getIntStyle('left'); };
这样的方法时this.yakinlik.uzak.X1 = this.getIntStyle('left');
它可以工作(实际上它给了NaN,但它是正常的,因为它没有重新计算,所以我必须在那里使用一个方法。)
以下是相关的代码:
'use strict';
function Div(isim) {
this.loc = document.getElementById(isim);
this.getStyle = function (stili) {
return window.getComputedStyle(this.loc).getPropertyValue(stili);
};
this.getIntStyle = function (stili) {
return parseInt(this.getStyle(stili), 10);
};
this.yakinlik = {
uzak: {
},
orta: {
},
yakin: {
},
cokyakin: {
}
};
this.yakinlik.uzak.X1 = function () { return this.getIntStyle('left'); };
}
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
var d = new Div("d");
d.loc.style.left = getRandomInt(0, window.innerWidth - 50) + "px";
d.loc.style.top = getRandomInt(0, window.innerHeight - 50) + "px";
console.log(d.yakinlik.uzak.X1() + " " + d.getIntStyle('top'));
如何在不使用属性的情况下解决此问题?
感谢。
答案 0 :(得分:3)
问题是您正在调用d.yakinlik.uzak.X1()
,因此在X1
内,this
将引用uzak
对象而非Div
实例,而不是getIntStyle
function Div(isim) {
this.loc = document.getElementById(isim);
this.getStyle = function (stili) {
return window.getComputedStyle(this.loc).getPropertyValue(stili);
};
this.getIntStyle = function (stili) {
return parseInt(this.getStyle(stili), 10);
};
var div = this;
this.yakinlik = {
uzak: {
X1: function () {
return div.getIntStyle('left');
}
}
};
}
属性。
一种解决方案是使用像
这样的闭包变量CREATE TABLE [Admin].[PlanManagers]
(
[ID] [bigint] IDENTITY(10000,1) CONSTRAINT PK_PLANMANAGERS Primary key NOT NULL,
[AdminUserId] [bigint]
CONSTRAINT FK_ADMINUSER_PLANMANAGERS
FOREIGN KEY REFERENCES [Login].[AdminUsers]([Id])
ON DELETE SET NULL NULL,
[PlanName] [nvarchar](255) NOT NULL,
[PlanIntro] [nvarchar](max) NULL,
[Active] [bit] Default(0) NOT NULL,
[Created] [datetime] Default(getutcdate()) NOT NULL,
[Updated] [datetime] Default(getutcdate()) NOT NULL,
[LastUpdatedBy] [BIGINT] NOT NULL,
)
演示:Fiddle