Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取javascript中构造函数本身内部的原型构造函数的名称_Javascript_Jquery - Fatal编程技术网

获取javascript中构造函数本身内部的原型构造函数的名称

获取javascript中构造函数本身内部的原型构造函数的名称,javascript,jquery,Javascript,Jquery,是否可以在javascript中获取类本身内部的类名称?它对于在中间件中动态创建的类上进行递归非常有用。 我认为这是一篇非常不恰当的帖子-因此我最好定义我想要解决的问题: MyClass = function(){ this.classname = ??? // Here is required and needed to store as a property } MyClass.prototype.log = function(){ alert(this.classname);

是否可以在javascript中获取类本身内部的类名称?它对于在中间件中动态创建的类上进行递归非常有用。 我认为这是一篇非常不恰当的帖子-因此我最好定义我想要解决的问题:

MyClass = function(){
  this.classname = ??? // Here is required and needed to store as a property
}

MyClass.prototype.log = function(){
   alert(this.classname); // The alert should be MyClass
}


var myClassObj = new MyClass();
myClassObj.log();
若“类”定义正确,则类对象具有构造函数属性,该属性是对类对象的引用

function A() {
  alert(this instanceof this.constructor);
}
var a = new A();
您可以通过以下方式在控制台中检查.prototype

console.dir(A.prototype)

命令

您可能正在查找此命令:

function MyClass() {};
var myInstance = new MyClass();
console.log(myInstance.constructor.name === "MyClass");
// true
要使其工作,必须如上所述声明函数,而不是使用
MyClass=function(){}
。然后,使用函数的属性,利用原型链(当查询
构造函数
属性时)

如果您需要在构造函数中直接访问,也可以使用构造函数引用:

function MyClass() { console.log(this.constructor.name === "MyClass"); };
var myInstance = new MyClass();
// true
这个问题涉及类似的主题,可能对您也很有用:

Javascript没有类。@alex23:你可以称它为类,也可以不称它为类。JavaScript没有这个关键字(尽管它是保留的),但是您可以获得与原型Java类相同的功能。对于OOP人员来说,说“类”要比说“链接到同一原型对象的对象”容易得多。@PavelS:事实上,这是万恶之源:试图将javascript强加于您最喜欢的基于类的OOP语言是在将立方体推过圆圈:您将得到在某种程度上模拟类的不可理解的框架,但如果您接受javascript本机模型,您可以做得更好,它可以移动上下文,可以从多个对象导入成员,以及其他与基于类的语言不兼容的强大内容。@PavelS。这是不同的范例:如果Java、PHP或C#是您的第一语言,那么忘记模式,从头开始。这就像在OOP中使用过程风格——您得到贫血域模型的反模式。如果你想成为一名优秀的javascript程序员,忘记类吧。别忘了提到这是一个非标准属性,并且不是所有地方都支持它@铺路。我在构造函数/原型上下文中工作,不以这种方式声明函数。它在我的上下文中是怎样的?构造函数上下文总是指向新创建的对象(除非它在没有
new
的情况下作为公共函数调用,这应该永远不会发生)。如果在原型中声明相同的函数,则其工作方式完全相同:
MyClass.prototype.protF=function(){console.log(this.constructor.name);}你知道上面写的(现在更好)原型构造函数上的代码是什么吗?