MINE笔记-面向对象编程,原型链的理解,构造函数,原型对象,实例化对象,prototype 运用


// to do list 创建构造函数,实例化对象,来做面向对象编程

// 创建构造函数--原型函数(原型对象)
function person(name,age,id){
  this.name = name;
  this.age = age;
  this.id =id
//   console.log(this)
}

// 创建实例化对象 学生jesica信息
var jesica = new person('jesica','18','id:99')
console.log(jesica)
//输出
//age: "18",
//id: "id:99",
//name: "jesica"

// 创建实例化对 学生ago信息
var ago = new person('ago','15','id:88')
ago.tip = 'just a little boy'
console.log(ago)
//输出
//age: "15",
//id: "id:88",
//name: "ago",
//tip: "just a little boy"


// 给构造函数person 加上all属性
person.prototype.all = 'allmssge'
console.log(jesica)
//输出
//age: "18",
//all: "allmssge",
//id: "id:99",
//name: "jesica"

console.log(ago)
//age: "15",
//all: "allmssge",
//id: "id:88",
//name: "ago",
//tip: "just a little boy"

var newman = new person('newman','10','55')
newman.laught = 'cn'
console.log(newman)

//age: "10",
//all: "allmssge",
//id: "55",
//laught: "cn",
//name: "newman"

什么是原型链。说白了,其实就是有限的实例对象和原型之间组成有限链,就是用来实现共享属性和继承的。

构造函数有一个prototype属性,这个属性是一个对象(object实例),是原型对象

【小结】

套用一句很粗暴的话,所谓原型链就是找妈的一种行为方式,就可以理解为人是人他妈生的,妖是妖他妈生的。原型链的核心其实就只有一个:属性共享和独立的控制,当你的对象实例需要独立的属性,所有做法的本质都是在对象实例里面创建属性。若不考虑太多,你大可以在Person里面直接定义你所需要独立的属性来覆盖掉原型的属性。总之,使用原型继承的时候,要对于原型中的属性要特别注意,因为他们都是牵一发而动全身的存在。现在最常用的方法是组合模式。

1、原型链

    1)构造函数、原型和实例的关系

        ①构造函数都有一个属性prototype,这个属性是一个对象(Object的实例)

        ②原型对象prototype里面有一个constructor属性,该属性指向原型对象所属的构造函数

        ③实例对象都有一个_proto_属性,该属性也指向构造函数的原型对象,它是一个非标准属性,不可以用于编程,它是用于浏览器自己使用的

    2)prototype与_proto_的关系

        ①prototype是构造函数的属性

        ②_proto_是实例对象的属性

                    ——这两者都指向同一个对象

    【总结】i)函数也是对象,对象不一定是函数;

            ii)对象的本质:无序的键值对集合;键值对当中的值可以是任意数据类型的值

            iii)对象就是一个容器,这个容器当中放的是(属性和方法)

    3)属性搜索

      ①在访问对象的某个成员的时候会先在对象中找是否存在

      ②如果当前对象中没有就在构造函数的原型对象中找

      ③如果原型对象中没有找到就到原型对象的原型上找

      ④知道Object的原型对象的原型是null为止

猜你喜欢

转载自blog.csdn.net/chose_DoIt/article/details/85076812