// 动态原型模式「
function Person(name,age){
this.name=name;
this.age=age;
if(typeof this.load!='function'){
Person.prototype={
constructor:Person,
job:'vip',
load:function(){
console.log(name,age);
}
}
}
}
var toti=new Person('toti',18);
toti.load();
// 」动态原型模式

网上查的答案都无法让我很满意,没有答到点子上,希望有大神解惑。
我希望了解到使用对象字面量报错的原理,是因为什么,求详细解答!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
假设有一个构造函数:
那么,在使用new操作符来调用一个构造函数的时候,发生了什么呢?其实很简单,就发生了四件事:
所以再看你的例子,可以看出_proto_的设置是先于你的设置动态原型(prototype)的语句执行的,并且重新设置的原型不会影响到已经创建的对象。
ps:参考自网上。
解决方法不是没有:
但是为什么要这样做呢?
以上回答都没有说到重要。
何为
new?创建一个实例的时候会两个过程:
1、构造
Person的时候,会把toti以传参的形式传递给构造函数,并替换this。2、设置原型链。
因此,创建一个实例以后,其实原型链已经确认了,而后你再调用
load肯定就找不到鸟。以上。
字面量创建的对象其原型对象被重写了
new一个对象时,构造函数会先做两件事,一是设置this值为new出来的空对象,而是设置好这个空对象的原型,调用构造函数只是给这个空对象添加属性。
第一次new对象时,这个对象的原型链已经确定了。Person.prototype = {}的形式只改变了Person的prototype属性,没有改变这个对象的原型,所以第一个对象找不到load、job等属性。Person.prototype.prop = value的形式既改变了Person的prototype又给对象的原型对象(__proto__)增加了属性prop.