我试图了解如何从其他构造函数访问属性。我想将App,Effect,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();
答案 0 :(得分:0)
当你上课时,课程本身并不适用。类的 Instances 就是你想要的。所以从Utils.resizeElement
调用App
不会做任何事情,因为resizeElement
是原型的一部分(即实例获取的部分,而不是 class 本身得到)。
您需要决定是否将方法和概念分组到单个实例中,在这种情况下,您可以只使用JS对象,例如:
var Utils = {
resizeElement: function(window) { ... }
}
如果您有一个名为Utils
的对象有一个名为resizeElement
的方法属性,那么您可以使用App
从Utils.resizeElement
调用它。
如果你真的想要一个课程,那么你有两个选择:1)将Utils
的实例传递给你的App
或者在{App
内创建一个新实例1}}。
选项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(...);
}
}