js中函数的prototype.constructor是指向函数本身,它有啥用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js中函数的prototype.constructor是指向函数本身,它有啥用相关的知识,希望对你有一定的参考价值。

js中函数的prototype.constructor是指向函数本身,它有什么用?修改后会有什么影响?

1,首先constructor并不是都可写,对于原始值(如1,true 或 "test"),该属性为只读。
2,constructor指向的是函数本身,这里的指向我们如果修改了,是会影响到所有通过此构造器生成的实例的,要理解这里就要去看一些javascript prototype原型方面的介绍,prototype的作用是继承和共享属性用的,他的作用范围会影响所有实例。
3,依赖constructor的检测是很不安全的,因为他随时可能被修改或者覆盖。

相关知识链接

------

constructor - JavaScript
ECMAScript Language Specification

-----

可能某些同学不太理解,我来个实际例子来解释一下好了:
constructor属性的出现从它本身的作用就可以理解,它有2个作用:

1,拿到实例的构造器。

比如我拿到了一个实例,想对其的某些原型方法进行修改(很危险),但是其实是可以通过拿constructor再改写这个constructor的prototype来影响所有实例的。(动态修改,这个时候你一定要知道你在做什么。。否则真的很危险)

2,对比两个实例是否是同一类型(native constructor)。
"string".constructor === String.prototype.constructor
再或者:
function test()
test1 = new test();
test2 = new test();
我们有些时候是需要判断test1和test2是否为同一类型的(比如我们确定是同一类型,那么他们应该就会有共有的prototype了吧?太天真了,这都是不靠谱。。)

-------

最后,如果你不知道你在做什么或者写什么,请先弄明白你需要干什么,再问为什么……否则,真的很危险……

作者:小爝
链接:https://www.zhihu.com/question/28570984/answer/41413202
来源:知乎   望给予采纳
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

参考技术A 是父级元素的描述
我写段东西说明下

var a = function()
//指向你通过new创建实例所产生的对象源
//function本身自己就是个对象,所以指向自己
a.prototype.constructor
//指向你当前Function对象的的父级元素
a.prototype.__proto__

var b = new a
b.constructor === a;

关于js中函数的调用问题

js中函数的调用方法

1、直接调用

函数名(参数);

2、通过指向函数的变量去调用

例如:

var myval = 函数名;

此刻 myval是指向函数的一个指针;

myval(实际参数);此刻调用的就是myval指向的那个函数;

关于js中函数返回值的获取

var myval = 函数名();

此刻myval 的值则是函数的返回值,若函数没有有返回值,则myval则被赋予undefine。

以上是关于js中函数的prototype.constructor是指向函数本身,它有啥用的主要内容,如果未能解决你的问题,请参考以下文章

js中的函数

js中setInterval()函数只执行一次的原因

js 函数如何去调用另一个函数中的函数?

【急】js中调用ActiveX控件中的函数?

js中函数执行顺序以及变量提升

对js中函数的调用