在Javascript中,为什么在构造函数上设置prototype会更改其实例上的.constructor值?
上面的控制台日志在Javascript中,为什么在构造函数上设置prototype会更改其实例上的.constructor值?,javascript,Javascript,上面的控制台日志 function Human(){ this.job = 'code' } //Human.prototype = {feeds: 'Pizza'}; var developer = new Human(); console.log(developer.constructor); function Human() { this.job = 'code'; } 当我取消注释行Human.prototype={feed:'Pizza'}it控制台日志 function
function Human(){
this.job = 'code'
}
//Human.prototype = {feeds: 'Pizza'};
var developer = new Human();
console.log(developer.constructor);
function Human() {
this.job = 'code';
}
当我取消注释行Human.prototype={feed:'Pizza'}代码>it控制台日志
function Human(){
this.job = 'code'
}
//Human.prototype = {feeds: 'Pizza'};
var developer = new Human();
console.log(developer.constructor);
function Human() {
this.job = 'code';
}
为什么在构造函数上设置原型会影响谁是构造函数创建的对象的构造函数
另一个例子:
function Object() {
[native code]
}
有注释的时候,它说构造器是人类,没有注释的时候,它说活生生的。当在原型上找到有效的东西时,为什么构造函数会进一步遍历
我想在这上面再加一层
function LivingBeing() {
breathes: 'air';
}
function Human(){
feeds: 'Pizza';
}
//Human.prototype = new LivingBeing();
var developer = new Human();
console.log(developer.constructor);
现在它说开发者的构造器正在改变。我能说构造器在原型链中尽可能远吗?developer
没有自己的名为constructor
的属性,因此当您要求它时,它会在原型链中查找。因为原型是一个普通对象,所以它的构造函数是默认的对象构造函数Object()
当您声明一个新函数(如function Human()
)时,JS会创建一个隐式对象,并填充prototype
和constructor
字段,如下所示:
function AThing(){
this.say = function(){return 'I am thing';};
}
function LivingBeing() {
breathes: 'air';
}
LivingBeing.prototype = new AThing();
function Human(){
feeds: 'Pizza';
}
Human.prototype = new LivingBeing();
var developer = new Human();
console.log(developer.constructor);
现在,当您编写dev=new Human
时,dev
的内部\uuuu proto\uu
属性设置为X
,并且dev.constructor
解析为X.constructor
,即Human
当您取消注释“pizza”行时,代码将变为以下内容:
X = {}
Human.prototype = X
X.constructor = Human
什么是构造函数?
返回对创建实例的
原型。请注意,此属性的值是对
函数本身,而不是包含函数名称的字符串。这个
值对于基本值(如1、true和
“测试”
第一种情况:
developer
的构造函数是函数Human(){this.job=“code”}
第二种情况:
因为您正在将原型重写为对象,所以现在开发人员是object{}
的实例
控制台显示所有本机全局对象,这些对象在javascript本身的实现中预定义为[本机代码]
。也就是说,他们没有透露实现。是的,但开发人员仍然是使用相同的人工构造函数创建的。是的,但当人工原型发生变化时,对象本身也发生了变化。你是说函数objectexact与抱歉的重复,我在发布时无法发现。