从构造函数变量中调用函数,在javascript中给出未定义的错误

时间:2013-09-19 07:33:25

标签: javascript

代码:

function CreateDiv(D) {

        D.width = this.width;
        D.height = this.height;
        D.position = "absolute";
        D.bottom = 0;
        D.right = function () { };
        D.id = Math.floor((Math.random() * 10) + 1);
        D.data = function () {
            return "this is data of Div" + D.id;
        };
        D.create = function () {
            var divToAppend = "<div id='" + D.id + "' style='border:1px solid black;width:20;height:20;'  >" + D.data + "</div>";
            return divToAppend;
           // $("#Container").append(divToAppend);
        };
    }

    function NewChat() {
        var divv = new CreateDiv({width:200,height:200});
        alert(divv.create); // undefiend 
    }

谁能告诉我我做错了什么?

2 个答案:

答案 0 :(得分:2)

您在课程定义中混淆了D.this.

function CreateDiv(D) {

    this.width = D.width;
    this.height = D.height;
    this.position = "absolute";
    this.bottom = 0;
    this.right = function () { };
    this.id = Math.floor((Math.random() * 10) + 1);
    this.data = function () {
        return "this is data of Div" + this.id;
    };
    this.create = function () {
        var divToAppend = "<div id='" + this.id + "' style='border:1px solid black;width:20;height:20;'  >" + this.data + "</div>";
        return divToAppend;
       // $("#Container").append(divToAppend);
    };
}

使用new运算符和函数创建新对象时,在该构造函数中使用this引用创建的对象。

在您的代码中,您只需扩展给定的参数D,该参数永远不会返回。

答案 1 :(得分:0)

而不是使用D.create; 你应该使用this.create

this.create = function () {
            var divToAppend = "<div id='" + D.id + "' style='border:1px solid black;width:20;height:20;'  >" + D.data + "</div>";
            return divToAppend;
           // $("#Container").append(divToAppend);
        };