原型及原型链的初步理解

1.什么是原型

原型是属性也是对象

Person.prototype.Lastname = “deng”
function  Person( name, age, sex) {
this.name = name;
this.sex = sex;
this. age = age;
}
var person = new Person(‘eeded’,35,‘male’);

在这里插入图片描述
这里的构造函数虽然没有lastname得属性,但是访问person()仍然可以有lastname="deng"是因为存在一个原型,也就是祖先。

2.原型的案例

Person.prototype.name = "sunny";
function Person() {
}
var person = new Person();
Person.prototype.name = "cherry";

函数是引用值不是原始值,堆内存储了sunny,紧接着后面修改了堆里面的值,变成了cherry。当控制台访问person.name变成了cherry。

Person.prototype.name = "sunny";
function Person() {
}
var person = new Person();
Person.prototype = {
   name:‘cherry’;
}

当控制台访问person.name结果是sunny。这里有关之前写过的堆和栈的理解,如果不熟悉堆栈可以去看看上一篇文章。栈里面的Person.prototype.name先指向了堆里面的sunny,执行new Person()后,在构造函数里面会有var this = {proto: Person.prototype}。这个语句等同于proto_=Person.prototype,_proto_跟Person.prototype一样指向了sunny;Person.prototype = { name:cherry;},该语句的结果是改变了Person.prototype.name指向堆里面的值,并没有改变_proto_指向的sunny,所以结果仍然是sunny。
总结:
Person.prototype={name:“sunny”};
proto=Person.prototype ;
Person.prototype = { name:‘cherry’}

Person.prototype.name = "sunny";
function Person() {
}
Person.prototype = {
   name:cherry;
}
var person = new Person();

在这里插入图片描述
当控制台访问person.name结果是cherry,与上面不同的是,Person.prototype = { name:‘cherry’}放在了生成对象之前,在栈里面先有Person.prototype指向了堆里面sunny,紧接着修改了里面的值。
总结:
Person.prototype={name:“sunny”};
Person.prototype = { name:‘cherry’}
proto=Person.prototype ;

在这里插入图片描述

3.原型链

Grand.prototype.name = "sunny";
function Grand() {
}
var grand = new Grand();
Father.prototype = grand;
function Father(){
this.name = 'xuming';
}
var father = new Father();
Son.prototype = father;
function Son(){
this.habbit="somke";
}
var son = new Son();

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值