0

我试图了解如何从另一个构造函数访问属性。例如,我想分离 App、Effects、Utils 等对象,并从一个到另一个调用属性和方法。这是可能的,还是这种方式完全错误?

var App = function() {

    this.someProperty = 'Lorem';
    this.init();
};

App.prototype = {

    init:function(){
        this.bindEvents();
    },

    bindEvents:function(){

        var self = this;

        $(window).on('resize', function(e) {
            e.preventDefault();
            this.windowWidth = $(window).width();
            // Is that Correct?
            Utils.prototype.resizeElement(this.windowWidth);
        });

    }

};


var Utils = function(){};


Utils.prototype = {

    resizeElement: function(windowW){
        console.log(windowW);   
    },

    someMethod:function(){

        // How can i access property written in App constructor?
        console.log(this.someProperty);
    }

};


var Effects = function(){
    this.init();
};


Effects.prototype = {

    hideElement:function(ele){
        $(ele).hide();
    }

};


var app = new App();
4

1 回答 1

0

当你有课程时,课程本身并没有多大作用。 类的实例是你想要的。所以调用Utils.resizeElementfromApp不会做任何事情,因为resizeElement它是原型的一部分(即实例获得的一部分,而不是本身获得的部分)。

您需要决定是否将方法和概念分组到单个实例中,在这种情况下,您可以只使用 JS 对象,例如:

var Utils = {
  resizeElement: function(window) { ... }
}

如果您有一个调用的对象,该对象调用Utils了一个方法属性,resizeElement那么您可以从Appwith调用它Utils.resizeElement

如果您真的想要一个类,那么您有两个选择:1)将 a 的实例传递Utils给您App或在App.

选项1:

var App = function(utils) {
    this.utils = utils;
    this.someProperty = 'Lorem';
    this.init();
};

App.prototype = {

    init: function(){
        this.bindEvents();
        this.utils.resizeElement(...);
    }
}

var u = new Utils();
var a = new App(u);

或者在内部做

var App = function() {
    this.utils = new Utils();
    this.someProperty = 'Lorem';
    this.init();
};

App.prototype = {

    init: function(){
        this.bindEvents();
        this.utils.resizeElement(...);
    }
}
于 2013-09-17T19:25:13.297 回答