1-- 首先对象的两种创建模式,这个两种哈,一种字面量,一种new obj,打死你你也不能忘,要不然单身一辈子。
第一种:
var qi=new Object();
第二种:
var qi1={}....
2-- 对象的创建分为很多种模式,正如找对象的方法有很一样。
3-- 工厂模式: 可以无数次的调用这个函数,每次返回一个包含这4个属性的对象。 工厂模式解决了多个相似对象的问题,但是却没有解决对象识别的问题(即怎样知道一个对象的类型,例如Array,Date等等)。
工厂模式:
function createObject(name,love,age,words){
var o = new Object();
o.name=name;
o.age=age;
o.love=love;
o.words=words;
o.say=function(){
console.log(this.words);
}
}
4-- 构造函数模式:可以用来创建特定类型的对象。
构造函数模式:
function createObject1(name,love,age,words){
this.name=name;
this.age=age;
this.love=love;
this.words=words;
this.say=function(){
console.log(this.words);
}
}
构造函数的创建新对象的过程:创建一个新对象 => 将构造函数的作用于给新对象(因此this就指向了这个新对象) => 执行构造函数中的代码(为这个新对象添加属性) => 返回这个新对象。
构造函数的问题: 每个方法都要在每个实例上重新创建一遍。
5--原型模式:原型模式的好处就是让所有对象实例共享他所包含的属性和方法--share~︿( ̄︶ ̄)︿!
原型模式:
function Co2(){
};
Co2.prototype.name="gg";
Co2.prototype.love="basketball";
Co2.prototype.age=27;
Co2.prototype.words="life is beautiful~!"
var G1=new Co2();
原型对象的理解:只要创建了一个函数,就会有一个prototype的属性指向这个函数的原型对象。 所有的原型对象都有一个constructor属性---是一个指向prototype所在的那个函数的指针。
实例中创建的和原型中同名的属性,实例的属性会将原型中的同名属性屏蔽掉。
5-1引申!!重写对象的原型:需要注意的是重写整个原型和在原型上添加方法是不一样的!
原型被字面量对象重写:
function Co3(){};
Co3.prototype={
name : "gg",
love : "basketball",
age : 27,
words : "life is beautiful~!"
};
var G2=new Co3();
上面的代码中我们将函数Co3的原型用字面量对象重写了,结果和上面的原型模式相同,但是constructor的指向不再是Co3,而是object,因为原型对象是通过字面量对象进行重写的;字面量对象哪来的,object造出来的呗,所以重写后的constructor被修改指向了object对象。
6-- 构造函数和原型的组合模式:构造函数用来定义实例属性,而原型用来定义共享的方法和属性。
构造函数和原型组合模式:
function Co4(name,love,age){
this. name=name;
this.love=love;
this.age=age;
};
Co4.prototype={
constructor : Co4,
saywords : "life is beautiful~!"
};
var G2=new Co4("kirk","sprots",27);
7-- 动态原型模式:通过检查某个应该存在的方法是否有效,来决定是否需要初始化原型。
function Person(name, age, job){
//properties
this.name = name;
this.age = age;
this.job = job;
//methods方法
if (typeof this.sayName != "function"){
Person.prototype.sayName = function(){
alert(this.name);
};
}
}
var friend = new Person("Nicholas", 29, "Software Engineer");
friend.sayName();
只有在sayname方法不存在得情况下,才会将他添加到原型中。这里对于原型的修改可以立即在所有实例中得到反映。
网友评论