原型笔记
发布日期:2022-03-09 12:36:20
浏览次数:158
分类:精选文章
本文共 2980 字,大约阅读时间需要 9 分钟。
原型:
1.原型是function对象的一个属性,他定义了构造函数制造出的对象的公共祖先。通过该构造函数产生的对象可以继承该原型的属性和方法。 2.利用原型特点和观念,可以提取公共属性。 3.对象如何查看原型, —— > 隐式属性 proto 。 4.对象如何查看对象的构造函数 —— > constructorPerson.prototype – 原型 Person.prototype = {} – 祖先
//这个时候相当于Person的祖先身上就有了一个surname属性,作为晚辈的person就继承了Person的属性。 Person.prototype.surname = 'qi'; Person.prototype.say = { } ; function Person(){ } /* person和person1兄弟俩同时继承父亲Person,Person有的东西person和person1都有, 就相当于Person有俩孩子两个孩子都可以花他钱。 */ var person = new Person(); var person1 = new Person(); console.log(person.surname); // 输出qi
再举个汽车加工厂的栗子 在汽车生产出来的有固定的属性 也有可选取的属性 比如固定的有长宽、车名,不固定的有颜色、车主名字等等。
这是普通的写法
function Car(color, owner) { this.color = color; this.oner = owner; this.carName = 'BMW'; this.height = 1400; this.long = 4900; }var car = new Car('red','feng');
当我们利用原型提取公共方法
//原型其实就是一个对象,也可以这样写 Car.prototype = { height:1400, long:4900, carName:'BMW', } function Car(color, owner) { this.color = color; this.oner = owner; } //两个都继承于Car的长、宽和车名 var car = new Car('red','feng'); var car1 = new Car('green','qi'); //输出:BWM 1400 4900 red feng console.log(car.carName,car.height,car.long,car.color,car.oner); //输出:BWM 1400 4900 green qi console.log(car1.carName,car1.height,car1.long,car1.color,car1.oner);
constructor:返回函数的构造函数
function Car(){ }var car = new Car();//输出:Car(){}console.log(car.constructor)
constructor:返回值也是可以手动修改的
function Person(){ }//在Car的原型中修改了constructor的指向Car.prototype = { constructor: Person,}function Car(){ }var car = new Car();//输出:Person(){}。console.log(car.constructor)
proto:就是存放这个对象的原型
Person.prototype.name = 'abc';function Person() { /* 其实在你构造一个函数的同时函数会自己隐式的在函数的顶端创建一个 var this = { __proto__:Person.prototype, } __protp__:指向自己的原型 然后再最后返回 所以在拿属性的时候 如果自己没有就会往上找自己的原型 */ }var person = new Person();
原型也是可以通过proto更改
Person.prototype.name = 'abc'; function Person() { /* var this = { 在对象生成的时候就会隐试的生成一个this对象 刚开始__protp__是指向Person.prototyoe; 后面person.__proto__ = obj;修改了proto的指向 } */ } var obj = { name:'sunny' } var person = new Person(); person.__proto__ = obj; console.log(person.name) //sunny
原型值的修改
Person.prototype.name = 'sunny';function Person() { }var person = new Person();Person.prototype = { name : 'cherry'}console.log(person.name);//输出:sunny
Person.prototype.name = 'sunny';function Person() { }Person.prototype = { name : 'cherry'}var person = new Person();console.log(person.name);//输出:cherry
//这种情况改不了 相当于换了一个新对象
相当于 var obj = {name:‘a’} var obj1 = obj; obj = {name:‘b’}然后将上面的换成下面的,这样就比较好理解。
Person.prototype = {name:‘a’}
proto = Person.prototype; Person.prototype = {name:‘b’} 原有的__proto__指向的还是原有的空间 但是如果Person.prototype = {name : ‘cherry’}放在new的前面 相当于在new的时候已经更改内部地址所以还是会打印cherry。Person.prototype.name = ‘cherry’;他能直接修改原型属性的值,因为他是直接找到了房间,然后修改了值
未完待续… ,欢迎大佬来怼 ,在挨怼中学习!!!
转载地址:https://blog.csdn.net/fsh123453/article/details/103211665 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2024年04月11日 22时36分15秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
flowable表单设计器选型
2019-04-26
高可用 Redis 服务架构分析与搭建
2019-04-26
flowable使用extensionElements自定义节点
2019-04-26
flowable自定义节点属性
2019-04-26
UE4-Gameplay技能系统
2019-04-26
TArray的MoveTemp推荐
2019-04-26
UnrealVS插件使用
2019-04-26
UE4 Low Level Memory Tracker使用
2019-04-26
UE4 PhyX物理引擎应用介绍
2019-04-26
UE4获取指定目录下所有文件
2019-04-26
UE4 遍历UserWidget下所有UI对象
2019-04-26
UE4 ReplicationGraph系统介绍
2019-04-26
过渡,动画与转换
2019-04-26
详解 弹性盒子
2019-04-26
js全选与全不选
2019-04-26
js放大镜
2019-04-26
js 倒计时demo
2019-04-26
js案例 生成行列随机颜色
2019-04-26
去除层叠样式表
2019-04-26
详解 移动端语义化标签
2019-04-26