原型笔记
发布日期:2022-03-09 12:36:20 浏览次数:158 分类:精选文章

本文共 2980 字,大约阅读时间需要 9 分钟。

原型:

1.原型是function对象的一个属性,他定义了构造函数制造出的对象的公共祖先。通过该构造函数产生的对象可以继承该原型的属性和方法。
2.利用原型特点和观念,可以提取公共属性。
3.对象如何查看原型, —— > 隐式属性 proto
4.对象如何查看对象的构造函数 —— > constructor

Person.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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:2021.11第四周C++编程刷题记录
下一篇:Java与C#基于Socket通信

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年04月11日 22时36分15秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章