【问题标题】:Use Object method in anthor object without using new keyword in javascript在另一个对象中使用 Object 方法而不在 javascript 中使用 new 关键字
【发布时间】:2014-12-04 18:57:49
【问题描述】:

我有两个构造函数,我只想在对象b 中使用对象a 方法而不使用new 关键字,因为我不想在不需要时创建具有所有属性的对象。例如,在构造函数 b 内部我想使用构造函数 b 方法。

function a(){
  this.first=function(){
    return 'aaaaaa'
  }
  this.last=function (){
    return 'bbbbb'
  }
}

function b(){
  this.name= //call method last of constructor a.
}    

var person= new b();
console.log(person.name) //bbbbb

注意:构造函数a包含两个方法。因此,在给定的示例中,我首先没有使用任何方法,但稍后可能需要。所以我不想创建new a()。我只想直接调用它

【问题讨论】:

  • 你不能那样做。将方法移至原型。

标签: javascript


【解决方案1】:
function a(){

}

a.prototype.last=function(){
    return 'bbbb'
}

function b(){
    this.name= a.prototype.last()//call method last of constructor a.
}    

var person= new b();
console.log(person.name) //bbbbb

【讨论】:

  • 您运行良好。只是为了了解直接在构造函数中分配方法和使用原型添加方法有什么区别
  • 嗯,这是一个很好的详细答案:stackoverflow.com/questions/2784844/…
【解决方案2】:

有多种方法可以得到它的功能。

  1. 创建名称空间
var a={
  first:function(){
    return 'aaaaaa'
  },
  last:function (){
    return 'bbbbb'
  }
}


function b(){
  this.name= a.last()
}
  1. 向原型属性添加方法
var a=function(){
};
a.prototype.first=function(){
   return 'aaaaaa'
};
a.prototype.last=function (){
    return 'bbbbb'
}
function b(){
  this.name= a.prototype.last()
}

最后这将与上一个相同。

  1. 调用 a() 并直接调用其方法。(不带 a())

第三个是调用 a() ,它将创建“first”和“last”方法,这些方法将对其上下文起作用。然后调用你的方法。 但不推荐这种方式。 例如。

function a(){
    this.first=function(){
        return 'aaaaaa'
    }
    this.last=function (){
        return 'bbbbb'
   }
}
a()
function b(){   this.name= last()}    

var person= new b(); console.log(person.name) //bbbbb}}

【讨论】:

  • 您的第一个示例不起作用。当我删除了这个。然后它工作正常。我只是想知道你所说的“调用 a() 并直接调用它的方法。(没有 a())”的 3 点,你能举一些例子吗
  • @amit,我修改了答案,请参考。
  • 对不起,命名空间中不需要这个。对不起我的错字
【解决方案3】:
function a(){

  this.first=function(){
    return 'aaaaaa';
  }

  this.last= lastfunc;

}

function b(){
  this.name= lastFunct()
}

var person= new b();
console.log(person.name) //bbbbb

function lastFunct() {
  return 'bbbbb';
}

【讨论】:

  • 我知道您正在尽可能接近地复制 OP 答案,但将这些函数添加到构造函数原型中可能会更好。例如b.prototype.name = 函数...,a.prototype.last = lastfunc,a.prototype.first = 函数...
  • @Patrick 我同意,但我会保持原样,因为该解决方案还有另一个答案。它仍然有效。
  • 同意。我在另一个答案之前提供了评论:)
【解决方案4】:

firstlast 在您创建 a 的实例之前不存在。如果这些只是静态方法,为什么不使用对象呢?

var a = {
  first: function(){
    return 'aaaaaa'
  },
  last: function (){
    return 'bbbbb'
  }
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-28
    • 2016-01-23
    • 2010-09-20
    • 2017-02-26
    • 2016-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多