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
来源:知乎 望给予采纳
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。