Javascript 声明为对象属性与传递为参数

Javascript 声明为对象属性与传递为参数,javascript,Javascript,什么时候定义对象的属性更好,还是传递局部变量作为参数更好 简化示例: var obj = function(){ this.method_1 = function(){ this.var_1 = 1; this.method_2(); }; this.method_2 = function(){ //Access var_1 var_3 = this.var_1 * 2; }; }

什么时候定义对象的属性更好,还是传递局部变量作为参数更好

简化示例:

var obj = function(){

    this.method_1 = function(){ 
        this.var_1 = 1; 
        this.method_2(); 
    }; 

    this.method_2 = function(){ 
        //Access var_1 
        var_3 = this.var_1 * 2; 
    }; 
}; 

var obj = function(){

    this.method_1 = function(){ 
        var var_1 = 1; 
        this.method_2(var_1); 
    }; 

    this.method_2 = function(var_1){ 
        //Access var_1 
        var_3 = var_1 * 2; 
    }; 
}; 
function Obj() {
    this.method = function(var_1) { 
        return var_1 * 2; 
    }; 
}
var o = new Obj;
console.log(o.method(1));
这有关系吗

编辑:我以前可能应该提到这一点,但仍然:


我的例子是,一个GoogleMap实例是通过mapPresenter对象上的一个方法创建的;此方法仅在被某个事件触发后执行。虽然我不需要从外部访问map实例,但我在presenter对象本身的许多方法中使用它,这将使在presenter对象上设置属性“更容易”。

我将添加我的2美分。这只是您希望从对象外部访问什么的问题

两个方法都可访问,属性不可访问

var obj = function(){

var var_1 = 1;
var var_3;

this.method_1 = function(){       
    this.method_2(); 
}; 

this.method_2 = function(){         
    var_3 = var_1 * 2; 
}; 
}; 
var obj = function(){

var var_1 = 1;
var var_3;

this.method_1 = function(){       
    method_2(); 
}; 

function method_2 (){         
    var_3 = var_1 * 2; 
}; 
}; 
var obj = function(){

this.var_1 = 1;
this.var_3;

this.method_1 = function(){       
    method_2(); 
}; 

function method_2 (){         
    this.var_3 = this.var_1 * 2; 
}; 
}; 
甚至

只有一个方法可访问,属性不可访问

var obj = function(){

var var_1 = 1;
var var_3;

this.method_1 = function(){       
    this.method_2(); 
}; 

this.method_2 = function(){         
    var_3 = var_1 * 2; 
}; 
}; 
var obj = function(){

var var_1 = 1;
var var_3;

this.method_1 = function(){       
    method_2(); 
}; 

function method_2 (){         
    var_3 = var_1 * 2; 
}; 
}; 
var obj = function(){

this.var_1 = 1;
this.var_3;

this.method_1 = function(){       
    method_2(); 
}; 

function method_2 (){         
    this.var_3 = this.var_1 * 2; 
}; 
}; 
甚至

一个方法可以访问,两个属性都可以访问

var obj = function(){

var var_1 = 1;
var var_3;

this.method_1 = function(){       
    this.method_2(); 
}; 

this.method_2 = function(){         
    var_3 = var_1 * 2; 
}; 
}; 
var obj = function(){

var var_1 = 1;
var var_3;

this.method_1 = function(){       
    method_2(); 
}; 

function method_2 (){         
    var_3 = var_1 * 2; 
}; 
}; 
var obj = function(){

this.var_1 = 1;
this.var_3;

this.method_1 = function(){       
    method_2(); 
}; 

function method_2 (){         
    this.var_3 = this.var_1 * 2; 
}; 
}; 

等等。

我再加上2美分。这只是您希望从对象外部访问什么的问题

两个方法都可访问,属性不可访问

var obj = function(){

var var_1 = 1;
var var_3;

this.method_1 = function(){       
    this.method_2(); 
}; 

this.method_2 = function(){         
    var_3 = var_1 * 2; 
}; 
}; 
var obj = function(){

var var_1 = 1;
var var_3;

this.method_1 = function(){       
    method_2(); 
}; 

function method_2 (){         
    var_3 = var_1 * 2; 
}; 
}; 
var obj = function(){

this.var_1 = 1;
this.var_3;

this.method_1 = function(){       
    method_2(); 
}; 

function method_2 (){         
    this.var_3 = this.var_1 * 2; 
}; 
}; 
甚至

只有一个方法可访问,属性不可访问

var obj = function(){

var var_1 = 1;
var var_3;

this.method_1 = function(){       
    this.method_2(); 
}; 

this.method_2 = function(){         
    var_3 = var_1 * 2; 
}; 
}; 
var obj = function(){

var var_1 = 1;
var var_3;

this.method_1 = function(){       
    method_2(); 
}; 

function method_2 (){         
    var_3 = var_1 * 2; 
}; 
}; 
var obj = function(){

this.var_1 = 1;
this.var_3;

this.method_1 = function(){       
    method_2(); 
}; 

function method_2 (){         
    this.var_3 = this.var_1 * 2; 
}; 
}; 
甚至

一个方法可以访问,两个属性都可以访问

var obj = function(){

var var_1 = 1;
var var_3;

this.method_1 = function(){       
    this.method_2(); 
}; 

this.method_2 = function(){         
    var_3 = var_1 * 2; 
}; 
}; 
var obj = function(){

var var_1 = 1;
var var_3;

this.method_1 = function(){       
    method_2(); 
}; 

function method_2 (){         
    var_3 = var_1 * 2; 
}; 
}; 
var obj = function(){

this.var_1 = 1;
this.var_3;

this.method_1 = function(){       
    method_2(); 
}; 

function method_2 (){         
    this.var_3 = this.var_1 * 2; 
}; 
}; 

等等。

我再加上2美分。这只是您希望从对象外部访问什么的问题

两个方法都可访问,属性不可访问

var obj = function(){

var var_1 = 1;
var var_3;

this.method_1 = function(){       
    this.method_2(); 
}; 

this.method_2 = function(){         
    var_3 = var_1 * 2; 
}; 
}; 
var obj = function(){

var var_1 = 1;
var var_3;

this.method_1 = function(){       
    method_2(); 
}; 

function method_2 (){         
    var_3 = var_1 * 2; 
}; 
}; 
var obj = function(){

this.var_1 = 1;
this.var_3;

this.method_1 = function(){       
    method_2(); 
}; 

function method_2 (){         
    this.var_3 = this.var_1 * 2; 
}; 
}; 
甚至

只有一个方法可访问,属性不可访问

var obj = function(){

var var_1 = 1;
var var_3;

this.method_1 = function(){       
    this.method_2(); 
}; 

this.method_2 = function(){         
    var_3 = var_1 * 2; 
}; 
}; 
var obj = function(){

var var_1 = 1;
var var_3;

this.method_1 = function(){       
    method_2(); 
}; 

function method_2 (){         
    var_3 = var_1 * 2; 
}; 
}; 
var obj = function(){

this.var_1 = 1;
this.var_3;

this.method_1 = function(){       
    method_2(); 
}; 

function method_2 (){         
    this.var_3 = this.var_1 * 2; 
}; 
}; 
甚至

一个方法可以访问,两个属性都可以访问

var obj = function(){

var var_1 = 1;
var var_3;

this.method_1 = function(){       
    this.method_2(); 
}; 

this.method_2 = function(){         
    var_3 = var_1 * 2; 
}; 
}; 
var obj = function(){

var var_1 = 1;
var var_3;

this.method_1 = function(){       
    method_2(); 
}; 

function method_2 (){         
    var_3 = var_1 * 2; 
}; 
}; 
var obj = function(){

this.var_1 = 1;
this.var_3;

this.method_1 = function(){       
    method_2(); 
}; 

function method_2 (){         
    this.var_3 = this.var_1 * 2; 
}; 
}; 

等等。

我再加上2美分。这只是您希望从对象外部访问什么的问题

两个方法都可访问,属性不可访问

var obj = function(){

var var_1 = 1;
var var_3;

this.method_1 = function(){       
    this.method_2(); 
}; 

this.method_2 = function(){         
    var_3 = var_1 * 2; 
}; 
}; 
var obj = function(){

var var_1 = 1;
var var_3;

this.method_1 = function(){       
    method_2(); 
}; 

function method_2 (){         
    var_3 = var_1 * 2; 
}; 
}; 
var obj = function(){

this.var_1 = 1;
this.var_3;

this.method_1 = function(){       
    method_2(); 
}; 

function method_2 (){         
    this.var_3 = this.var_1 * 2; 
}; 
}; 
甚至

只有一个方法可访问,属性不可访问

var obj = function(){

var var_1 = 1;
var var_3;

this.method_1 = function(){       
    this.method_2(); 
}; 

this.method_2 = function(){         
    var_3 = var_1 * 2; 
}; 
}; 
var obj = function(){

var var_1 = 1;
var var_3;

this.method_1 = function(){       
    method_2(); 
}; 

function method_2 (){         
    var_3 = var_1 * 2; 
}; 
}; 
var obj = function(){

this.var_1 = 1;
this.var_3;

this.method_1 = function(){       
    method_2(); 
}; 

function method_2 (){         
    this.var_3 = this.var_1 * 2; 
}; 
}; 
甚至

一个方法可以访问,两个属性都可以访问

var obj = function(){

var var_1 = 1;
var var_3;

this.method_1 = function(){       
    this.method_2(); 
}; 

this.method_2 = function(){         
    var_3 = var_1 * 2; 
}; 
}; 
var obj = function(){

var var_1 = 1;
var var_3;

this.method_1 = function(){       
    method_2(); 
}; 

function method_2 (){         
    var_3 = var_1 * 2; 
}; 
}; 
var obj = function(){

this.var_1 = 1;
this.var_3;

this.method_1 = function(){       
    method_2(); 
}; 

function method_2 (){         
    this.var_3 = this.var_1 * 2; 
}; 
}; 

等等。

只有当您需要从外部访问它,并且该值在逻辑上是实例的一部分时,它才应该是属性。如果该值仅用于调用,则应使用方法参数。您是在方法调用中创建属性,而不是在实例化时(在构造函数中)创建属性,这应该作为一种警告

function Obj() {
    this.var_1 = 1; 

    this.method = function() { 
        return this.var_1 * 2; 
    }; 
}
var o = new Obj;
console.log(o.var_1);
console.log(o.method());

var obj = function(){

    this.method_1 = function(){ 
        var var_1 = 1; 
        this.method_2(var_1); 
    }; 

    this.method_2 = function(var_1){ 
        //Access var_1 
        var_3 = var_1 * 2; 
    }; 
}; 
function Obj() {
    this.method = function(var_1) { 
        return var_1 * 2; 
    }; 
}
var o = new Obj;
console.log(o.method(1));

只有当您需要从外部访问它,并且该值在逻辑上是实例的一部分时,它才应该是属性。如果该值仅用于调用,则应使用方法参数。您是在方法调用中创建属性,而不是在实例化时(在构造函数中)创建属性,这应该作为一种警告

function Obj() {
    this.var_1 = 1; 

    this.method = function() { 
        return this.var_1 * 2; 
    }; 
}
var o = new Obj;
console.log(o.var_1);
console.log(o.method());

var obj = function(){

    this.method_1 = function(){ 
        var var_1 = 1; 
        this.method_2(var_1); 
    }; 

    this.method_2 = function(var_1){ 
        //Access var_1 
        var_3 = var_1 * 2; 
    }; 
}; 
function Obj() {
    this.method = function(var_1) { 
        return var_1 * 2; 
    }; 
}
var o = new Obj;
console.log(o.method(1));

只有当您需要从外部访问它,并且该值在逻辑上是实例的一部分时,它才应该是属性。如果该值仅用于调用,则应使用方法参数。您是在方法调用中创建属性,而不是在实例化时(在构造函数中)创建属性,这应该作为一种警告

function Obj() {
    this.var_1 = 1; 

    this.method = function() { 
        return this.var_1 * 2; 
    }; 
}
var o = new Obj;
console.log(o.var_1);
console.log(o.method());

var obj = function(){

    this.method_1 = function(){ 
        var var_1 = 1; 
        this.method_2(var_1); 
    }; 

    this.method_2 = function(var_1){ 
        //Access var_1 
        var_3 = var_1 * 2; 
    }; 
}; 
function Obj() {
    this.method = function(var_1) { 
        return var_1 * 2; 
    }; 
}
var o = new Obj;
console.log(o.method(1));

只有当您需要从外部访问它,并且该值在逻辑上是实例的一部分时,它才应该是属性。如果该值仅用于调用,则应使用方法参数。您是在方法调用中创建属性,而不是在实例化时(在构造函数中)创建属性,这应该作为一种警告

function Obj() {
    this.var_1 = 1; 

    this.method = function() { 
        return this.var_1 * 2; 
    }; 
}
var o = new Obj;
console.log(o.var_1);
console.log(o.method());

var obj = function(){

    this.method_1 = function(){ 
        var var_1 = 1; 
        this.method_2(var_1); 
    }; 

    this.method_2 = function(var_1){ 
        //Access var_1 
        var_3 = var_1 * 2; 
    }; 
}; 
function Obj() {
    this.method = function(var_1) { 
        return var_1 * 2; 
    }; 
}
var o = new Obj;
console.log(o.method(1));

没有正确的答案,但有一点需要考虑:

一旦方法_1完成,var_1对obj是否意味着什么?或者var_1只是计算的辅助工具

我更愿意保持数据模型的正常形式。如果VARE1是另一个对象的属性,那么也不要将它存储在OBJ中,考虑在OBJ中直接创建对另一个对象的引用,(Obj.Value.VARE1)。 如果要在内存中构造多个OBJ,将var_1作为参数传递将减少内存占用

我想方法1可以重写为 方法1=绑定(obj,1)


另外,将方法1和方法2添加到原型中,以便只创建一个函数实例。

没有正确答案,但需要考虑以下几点:

一旦方法_1完成,var_1对obj是否意味着什么?或者var_1只是计算的辅助工具

我更愿意保持数据模型的正常形式。如果VARE1是另一个对象的属性,那么也不要将它存储在OBJ中,考虑在OBJ中直接创建对另一个对象的引用,(Obj.Value.VARE1)。 如果要在内存中构造多个OBJ,将var_1作为参数传递将减少内存占用

我想方法1可以重写为 方法1=绑定(obj,1)


另外,将方法1和方法2添加到原型中,以便只创建一个函数实例。

没有正确答案,但需要考虑以下几点:

一旦方法_1完成,var_1对obj是否意味着什么?或者var_1只是计算的辅助工具

我更愿意保持数据模型的正常形式。如果VARE1是另一个对象的属性,那么也不要将它存储在OBJ中,考虑在OBJ中直接创建对另一个对象的引用,(Obj.Value.VARE1)。 如果要在内存中构造多个OBJ,将var_1作为参数传递将减少内存占用

我想方法1可以重写为 方法1=绑定(obj,1)


另外,将方法1和方法2添加到原型中,以便只创建一个函数实例。

没有正确答案,但需要考虑以下几点:

一旦方法_1完成,var_1对obj是否意味着什么?或者var_1只是计算的辅助工具

我更愿意保持数据模型的正常形式。如果VARE1是另一个对象的属性,那么也不要将它存储在OBJ中,考虑在OBJ中直接创建对另一个对象的引用,(Obj.Value.VARE1)。 如果要在内存中构造多个OBJ,将var_1作为参数传递将减少内存占用

伊格