Javascript 如何获取函数内部函数的引用

Javascript 如何获取函数内部函数的引用,javascript,Javascript,假设我有一个这样的函数 function a() { //get a reference console.log( /*something that will get me reference to function a*/); } 为什么? 我在想我能做到这一点 function Car() { //{reference2myself}.prototype = Vechile.prototype; Car.prototype = Vechile.prototype; } 注

假设我有一个这样的函数

function a() {
 //get a reference
 console.log( /*something that will get me reference to function a*/);
}
为什么?

我在想我能做到这一点

function Car() {
   //{reference2myself}.prototype = Vechile.prototype;
   Car.prototype = Vechile.prototype;
}
注意,我必须手动设置汽车参考,我不想这样做

另外,顺便说一句,为什么原型不设置在主工厂功能中,我理解这意味着对于使用该功能创建的每个实例,所有原型道具都将被重新分配给同一个对象

我真正想做的是:

Object.prototype.extend = function(clas) {
   clas.call(this);
   this.prototype = this.prototype || {};
   Object.setPrototypeOf(this.prototype, clas.prototype);
   this.prototype.constructor = arguments.caller;
}

//then i could use it like this

function Vechile(){
 this.loc=0;
}

Vechile.prototype.move = function(){
  this.loc++;
};

function Van(){
 this.extend(Vechile);
}
Van.prototype.pickUp = function(){};

var a = new Van();
    // now a should have pickup method
    // move method
    // and Van prototype should be and object which should have its __proto__ set to Car.prototype
更新 我想我终于找到了让我可以轻松模拟类继承的代码。如果我遗漏了什么,请告诉我

Object.prototype.extends = function(clas) {
   clas.call(this);
   var proto = Object.getPrototypeOf(this);
   Object.setPrototypeOf(proto, clas.prototype);
}

//then i could use it like this
//super class
function Vechile(){
 this.loc=0;
}

Vechile.prototype.move = function(){
  this.loc++;
};

//sub class
function Van(){
  this.extends(Vechile);
}

Van.prototype.pickUp = function(){};

var a = new Van();
简短的回答:不要

Car函数是一个构造函数。因此,它将继承原型属性。您不希望将
Car.prototype=which
放在构造函数内部,而是放在构造函数外部

编辑:

如果您打算将Car作为车辆的子类:

function Car() {
    Vehicle.call(this);
    // this.parent = Vehicle or whatever you want to do
}
Car.prototype = Object.create(Vehicle.prototype);
Car.prototype.constructor = Vehicle;

Car.prototype=…
;在函数中使用函数名来引用它们,或者使用
参数。被调用方
,但这会受到反对,所以请使用名称。如果要引用构造函数生成的对象(如命名约定所示),使用
点击实例本身,并定义实例之间不共享的属性。您的问题写得没有意义,因此如果您解释您实际试图解决的问题,它可能会澄清问题。请立即检查。使用name将不适用于sorta helper的扩展函数functioni试图为javascript创建一个扩展/超级函数,它将完成两件事。当在构造函数内部调用时,它将在此基础上运行父构造函数,然后设置从父构造函数的prototype@MuhammedUmer如果您试图呼叫家长,则必须直接呼叫。不幸的是,在ES5中,没有更好的方法可以做到这一点。请参见编辑。@MuhammadUmer我知道您正在尝试做什么,使用排序为子类的helper函数,但正如我之前所说的:不幸的是,在当前版本的JS中,这种方法会产生副作用,被认为是“错误”的继承方式。看一看一些arbitary,它也使用了这个答案中的方法。你能检查一下新的扩展方法吗。我想不出除了它的全球功能之外还有什么副作用,它是ie11+唯一的东西
function Car() {
    Vehicle.call(this);
    // this.parent = Vehicle or whatever you want to do
}
Car.prototype = Object.create(Vehicle.prototype);
Car.prototype.constructor = Vehicle;