javaScript原型链prototype

创建对象的几种方法
1.Object实例
var person = new Object();
2.字面量语法创建
var person= {name:“Nicholas”}

弊端:
要产生大量对象,会产生大量重复代码
solve:
用工厂模式,多次调用这个函数,创建相似对象

3.工厂模型

 function createPerson(name,age,job){
            	var o = new Object();
            	o.name = name;
            	o.age = age;
            	o.job = job;
            	o.sayName = function(){
            		console.log(this.name);
            	}
            	return o;
            }
            var person1 = createPerson('lili',29,'teacher');
            var person2 = createPerson('lulu',60,'Doctor');
			person1.sayName();//lili
			person2.sayName();//lulu
           //	ECMAScript的函数是对象,因此每定义一个函数,就实例化一个对象
			console.log(person1.name ==person2.name)//false
			console.log(person1.sayName == person2.sayName)//false
			//
			console.log(person1.constructor == createPerson)//false计算机识别是false.按理来说是true.
			console.log(person1 instanceof createPerson)//false计算机识别是false.按理来说是true.

优点:解决了多次调用这个函数创建相似对象
缺点:他不知道创建的这个对象从那里来的,用instanceof,construtor都不起作用(这个缺点可以由构造函数创建对象来解决)

4.构造函数

      function Person(name,age,job){
				this.name = name;
				this.age = age;
				this.job = job;
				this.sayName = sayName;
				//sayName是一个指向函数的指针,将sayName属性设置成等于全局的sayName函数
			}
			//通过函数定义转移到构造函数外部来解决这个问题
			//这个问题就是:避免创建多个完成完成同样任务的Function实例,浪费内存空间。
			function sayName (){
				alert(this.name)
			}
			var person1 = new Person('lisi',29,"software Engineer");
			var person2 = new Person('gouzi',39,"Doctor");
			console.dir(person1);
			console.dir(person2);

优点:知道自己创建的对象是哪里来的。
缺点:会创建多个完成同样任务的Function实例
solve
将函数定义放在构造函数外面>又产生新的问题
新问题:若定义超多方法,就会生成很多全局函数,毁了封装的概念。
解决就是“原型模型”

5.原型模型
可以让所有的实例共享它所包含的属性和方法

     function Person(){	}
		Person.prototype.name = 'lili';
		Person.prototype.age = '40';
		Person.prototype.sayName = function(){
			console.log(this.name);
		}
		var person1 = new Person();
		person1.sayName();//lili
		var person2 = new Person();
		person1.sayName();//lili
		console.log(person1.sayName == person2.sayName)//true

猜你喜欢

转载自blog.csdn.net/qq_35209064/article/details/85623868