首页 > 代码库 > 对原型链的理解 语言表达能力不好 直接用代码,哈

对原型链的理解 语言表达能力不好 直接用代码,哈

分享一下 我对原型和原型链的理解

原型对象:

 

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)

欢迎补充,谢谢。

对原型链的理解 语言表达能力不好 直接用代码,哈