js中函数的prototype.constructor是指向函数本身,它有什么用
答案:3 悬赏:20 手机版
解决时间 2021-02-01 14:00
- 提问者网友:捧腹剧
- 2021-01-31 23:33
js中函数的prototype.constructor是指向函数本身,它有什么用
最佳答案
- 五星知识达人网友:春色三分
- 2021-02-01 01:03
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
来源:知乎 望给予采纳
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
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
来源:知乎 望给予采纳
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
全部回答
- 1楼网友:孤老序
- 2021-02-01 03:05
是父级元素的描述
我写段东西说明下
var a = function(){}
//指向你通过new创建实例所产生的对象源
//function本身自己就是个对象,所以指向自己
a.prototype.constructor
//指向你当前Function对象的的父级元素
a.prototype.__proto__
var b = new a
b.constructor === a;
- 2楼网友:猎心人
- 2021-02-01 01:54
1,js函数:
js中没有类的概念,但是它模拟了类的构成,js中的构造函数 就类似于java中所说的类,类名是函数名,构造函数在生成的时候会自动拥有一个prototype属性,它是一个引用,引用了该构造函数的原型对象,而这个原型对象也会自动获得一个属性constructor,用来指向该构造函数
2,js中的实例对象:
通过构造函数new出来的实例对象会拥有一个内置属性_pro_,它指向构造它的构造函数的原型对象,所以所有new出来的实例对象都会共享该原型对象的属性和方法(这也是原型对象存在的意义)。
3,实例对象与constructor的联系:
所以实际上实例对象和构造函数并没有直接的关系,它是通过构造函数的原型对象和构造函数联系的,前面说了,实例对象会共享原型对象的属性,所以实例对象也会拥有一个constructor的属性,这样它和构造函数就产生了联系。
4,这种联系的作用:
这种联系,就可以知道该实例对象属于哪个类(也就是构造函数)
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯