首页 > 代码库 > 对原型链的理解 语言表达能力不好 直接用代码,哈
对原型链的理解 语言表达能力不好 直接用代码,哈
分享一下 我对原型和原型链的理解
原型对象:
function People(nameValue,ageValue,fondValue)
{
this.name = nameValue;
this.age = ageValue;
this.fond = fondValue;
}
People.prototype.rule = function()
{
console.log(this.name+‘说:人人皆需奉献,人人都有一死‘)
}
People.prototype =
{
insteresting:‘烤红薯‘,
work:function()
{
console.log(‘搬砖‘)
}
}
var p1 = new People(‘大傻‘,25,‘哭‘)
var p2 = new People(‘二傻‘,22,‘吃‘)
// 先从对象中找属性 找不到再从对象的原型中找该属性
console.log(p1.insteresting)
// 对象属性的修改影响不到原型的内容
p1.insteresting = ‘大西瓜‘;
console.log(p1.insteresting) //大西瓜
console.log(p2.insteresting) //烤红薯
People.prototype.insteresting = ‘大榴莲‘
console.log(p2.insteresting) //大榴莲
---------------------------------------------------------------------------------------------------------------
原型链:
function Baby(name,age,birthDay)
{
this.name = name;
this.age = age;
this.birthDay = birthDay;
}
Baby.prototype.eat = function(food)
{
console.log(this.name + ‘吃了‘ + food)
}
Baby.prototype.sleep = function(time)
{
console.log(this.name +‘睡了‘ + time + ‘个小时‘)
}
var baby = new Baby(‘葫芦娃‘,1,new Date(2017,1,1))
console.log(baby.name)
baby.eat(‘奶粉‘)
baby.sleep(‘18‘)
function Child(name,age,birthDay)
{
// call函数用于改变函数中this的指向,用于对象A调用对象B的方法
Baby.call(this,name,age,birthDay)
}
// Child.prototype = Baby.prototype;
// ----总结:上面这种方法虽然也能实现但是错误的 原型共享同一块内存地址
// 直接让两个原型相等的话 Child的prototype和Baby的prototype是同一个prototype
// 如果修改Child的prototype或者Baby的prototype 会引起另一个对象原型的改变
//下面这种方法才是对的 让Child继承Baby的原型
function Temp(){ }
Temp.prototype = Baby.prototype;
var temp = new Temp();
Child.prototype = temp;
// 或者这种也可以
// Child.prototype = new Baby()
//
// Child.prototype.constructor = Child;
Child.prototype.study = function()
{
console.log(‘好好学习,天天向上‘)
}
Child.prototype.play =function(game)
{
console.log(this.name + ‘喜欢玩‘ +game)
}
var child = new Child(‘萝莉‘,16,new Date(2000,1,1))
console.log(child.name)
console.log(child.age)
child.play(‘抓娃娃‘)
child.study()
child.eat(‘哈根达斯‘)
child.sleep(9)
欢迎补充,谢谢。
对原型链的理解 语言表达能力不好 直接用代码,哈