调用Object Method会出现“Uncaught TypeError:is not a function”错误

时间:2015-05-09 10:45:30

标签: javascript function uncaught-typeerror

问题: 调用(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'));

如何在不使用属性的情况下解决此问题?

感谢。

1 个答案:

答案 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