欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > js构造函数的prototype赋值总结

js构造函数的prototype赋值总结

2024/10/24 1:50:58 来源:https://blog.csdn.net/qq_33039355/article/details/141056369  浏览:    关键词:js构造函数的prototype赋值总结

我们知道通过构造函数的prototype,可以生成让所有实例对象访问的通用属性和方法,下面通过代码来解释这个过程

function Person(name){this.name = name;
}Person.prototype.sex = 'man'

我们定义了一个构造函数Person,然后给它的prototype添加了一个sex的属性,下面我们来看看Person的结构

console.dir(Person)

在这里插入图片描述
下面,我们来实例化一个person的对象

let person = new Person('mike')
console.dir(person)

在这里插入图片描述

上面的结构我们看的到person的原型_proto_(图片中的[[prototype]],浏览器写法的区别)指向了构造函数Person的prototype

person.__proto__ === Person.prototype // true

这里需要特别注意的一点是__proto__和prototype属性都是作为对象的一个引用,是指针,指向存储中实际存在的一个变量,当变量中的属性和方法有变化的时候__proto__和prototype都会随之改变

如果prototype指针指向新的变量的时候,prototype会有一个新的值,但是__proto__并不会改变哦,因为它的指针没有变换指向哈,还是指向原来的变量,值当然不会改变.

我们来看看是不是和我们判断一样

function Person(name){this.name = name;
}
Person.prototype.sex = 'man'
let person = new Person('mike')
Person.prototype = { age: 18 }
person.__proto__
//{sex: 'man', constructor: ƒ}
Person.prototype
//{age: 18} 

从上述代码看出,和我们的预判一致,下面我们多创建一些实例对象来体验一下

function Person(name){this.name = name;
}
Person.prototype.sex = 'man'
let person1 = new Person('mike')
Person.prototype = { age: 18 }
let person2 = new Person('lili')

下面,我们分别来看重新赋值前后,两次实例对象的区别

person1.age // undefined
person2.age //18
person1.sex // 'man'
person2.sex //undefined

所以,我们可以总结出,
1、构造函数prototype修改或者添加属性会对原实例对象产生影响
2、构造函数prototype重新赋值,不会对原实例对象产生影响,只会对修改后的实例对象有影响

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com