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
来源:知乎 望给予采纳
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
我写段东西说明下
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是指向函数本身,它有啥用的主要内容,如果未能解决你的问题,请参考以下文章