关于原型和方法链的问题

时间:2014-06-06 13:18:48

标签: javascript

不确定我做错了什么,但我在控制台中不断收到以下消息。任何指导将不胜感激。如果你们对如何处理这个问题有更好的建议请告诉我!

未捕获的TypeError:undefined不是函数

var animEngine = {};

animEngine.init = function () {
    'use strict';

    var elem = function(){};

    elem.prototype = {
        objType : '',
        objClass : '',
        objBackground: '',
        objWidth: '',
        objHeight: ''
    }

    var squareElem = Object.create(elem, {
        objType : {value: 'div'},
        objClass : {value: 'squareElement'},
        objBackground : {value: 'red'},
        objWidth : {value: '200px'},
        objHeight : {value: '200px'}
    });

    Function.prototype.method = function (name, fn) {
        this.prototype[name] = fn;
        return this;
    }

    squareElem.
                method('createObj', function () {
                    this.element = document.createElement(this.objType);
                    document.getElementsByTagName('body')[0].appendChild(this.element);
                    this.element.className = this.objClass;
                    this.element.style.height = this.objHeight;
                    this.element.style.width = this.objWidth;
                    this.element.style.backgroundColor = this.objBackground;

                    return this;
                }).
                method('moveObj', function (x,y) {
                    this.element.style.position = 'relative';
                    this.element.style.left = x + 'px';
                    this.element.style.top = y + 'px';

                    return this;
                });

    squareElem.createObj().moveObj('100px', '100px');
};


animEngine.init();

3 个答案:

答案 0 :(得分:0)

你有一个错字:

var squareElem

应该是

var squareElement

答案 1 :(得分:0)

因为你没有使用squareElem。您正在使用未定义的squareElement 您的代码是:var squareElem = Object.create

答案 2 :(得分:0)

您错误地使用了Object.create。假设您希望新对象继承自 elem.prototype (即好像它是 elem 的实例),那么传递的对象应该是要用作的对象新对象的[[Prototype]],即它应该是 elem.prototype ,而不是 elem

另外,当你写:

Function.prototype.method

然后方法将由Function实例(即函数)继承。然后你打电话:

squareElem.method

squareElem 是由 Object.create 创建的普通对象,因此它不是函数,因此不会从 Function.prototype 并且没有方法方法。