前言
把高程的相关部分又看了一部分,所以整理一下笔记…..题外话:做了一天课设想吐,果然自己不想搞硬件,好好做前端吧(看看写不写的完吧)
创建对象
主要的模式如下
- 工厂模式 123456789101112function createPerson(name,age,job){var o =new Object();o.name=name;o.age= name;o.job=job;o.sayName = function(){console.log(this.name);}return o;}var person1=createPerson("Nicholas",29, "Sofeware Engineer");var person2=createPerson("lizehong", "Doctor");
没有解决对象识别问题(怎么知道一个对象的类型)
- 构造函数模式123456789101112function Person(name,age,job){this.name=name;this.age=age;this.job=job;this.sayName = function(){console.log(this.name);};}var person1 = new Person("Nicholas",29,"Software Engineer");var person2 = new Person("Greg",27,"Doctor");console.log(person1.constructor == Person); //trueconsole.log(person2.constructor==Person); //true
construct为构造函数属性,指向Person;
person1和person2的同名函数是不相等的
可通过原型函数解决这个问题1console.log(person1.sayName==person2.sayName);//false
原型模式
what is 原型
当创建一个函数时,会同时创建一个prototype属性,这个属性指向函数的原型对象。而原型对象都会自动获得一个constructor属性,指向prototypen属性所在的函数的指针比如:
Person.prototype.constructor指向Person 当调用构造函数创建一个新的实例时,该实例包含一个指针,指向构造函数的原型对象可称为[[Prototype]],可通过isPrototypeOf()方法来确定对象是否存在这种关系12console.log(Person.prototype.isPrototypeOf(person1);console.log(Person.prototype,isPrototypeOf(person2);
…..有待更新