网站建设都需要哪些材料,二级学院网站建设方案,易语言做检测网站更新,中国品牌500强排名javascript 中常见的创建对象的几种方式#xff1a; 1. 使用Object构造函数创建#xff1b; 使用Object构造函数来创建一个对象#xff0c;下面代码创建了一个person对象#xff0c;并用两种方式打印出了Name的属性值。 var person new Object();
person.namekevin 1. 使用Object构造函数创建 使用Object构造函数来创建一个对象下面代码创建了一个person对象并用两种方式打印出了Name的属性值。 var person new Object();
person.namekevin;
person.age31;
alert(person.name);
alert(person[name]) 2. 使用对象字面量创建一个对象 var person {name:Kevin,age:31,5:Test
};
alert(person.name);
alert(person[5]); 3. 使用工厂模式创建对象 返回带有属性和方法的person对象。 function createPerson(name, age,job){var o new Object();o.namename;o.age31;o.sayNamefunction(){alert(this.name);};return o;
}
createPerson(kevin,31,se).sayName(); 用函数来封装以特定接口创建对象的细节解决了创建多个相似对象的问题但是没有解决对象识别的问题怎么知道一个对象的类型。 4. 使用自定义构造函数模式创建对象 这里注意命名规范作为构造函数的函数首字母要大写以区别其它函数。这种方式有个缺陷是sayName这个方法它的每个实例都是指向不同的函数实例而不是同一个。构造函数模式构造函数添加属性和方法使用的时候new一个自定义的对象 function Person(name,age,job)
{this.namename;this.ageage;this.jobjob;this.sayNamefunction(){alert(this.name);};
}var person new Person(kevin,31,SE);
person.sayName(); new一个构造函数的内部操作步骤 1、创建一个新对象 2、将构造函数的作用域赋给新对象因此this就指向了这个新对象 3、执行构造函数中的代码 4、返回新对象。 使用构造函数创建的实例都会有一个constructor属性指向构造函数。 创建自定义的构造函数意味着将来可以将它的实例标识为一种特定的类型。这正是胜过工厂模式的地方。 与普通函数的区别在于new调用不用new来调用与普通函数无差。 不使用new调用的时候就相当于window调用了构造函数属性和方法都被添加到了window对象上去。 也可以这样使用call就是为了改变上下文环境而生 var o new Object();
Person.call(o,Dadaoshenyi,25,Enginner);
o.sayName();//Dadaoshenyi 构造函数创建对象的问题每个方法都要在实例上重写一遍。由于函数也是对象因此每次定义一个函数也就实例化了一个对象。 5. 使用原型模式创建对象 解决了方法4中提到的缺陷使不同的对象的函数如sayFriends指向了同一个函数。 但它本身也有缺陷就是实例共享了引用类型friends从下面的代码执行结果可以看到两个实例的friends的值是一样的这可能不是我们所期望的。原型模式定义构造函数构造函数原型上添加属性和方法。 function Person(){}Person.prototype {constructor : Person,name:kevin,age:31,job:SE,friends:[Jams,Martin],sayFriends:function(){alert(this.friends);}
};
var person1 new Person();
person1.friends.push(Joe);
person1.sayFriends();//Jams,Martin,Joe
var person2 new Person();
person2.sayFriends();//James,Martin,Joe 构造函数的原型||对象实例的内部指针[[Prototype__proto__]]指向Person.prototype。 实例对象的内部指针指向构造函数的原型。 原型模式的优点自定义的构造函数可以让所有的对象实例共享原型对象所包含的属性和方法。原生的引用类型也是采用这种模式。 问题在于1、省略了构造函数传递参数的步骤。2、所有实例共享方法和属性这样实例修改原来的属性或者方法将会在所有的实例上表现出来。被捆绑到了一起。只是一个引用不是一个副本。 6. 组合使用原型模式和构造函数创建对象 解决了方法5中提到的缺陷而且这也是使用最广泛、认同度最高的创建对象的方法。组合使用构造函数模式和原型模式最常用的一种模式。 function Person(name,age,job)
{this.namename;this.ageage;this.jobjob; this.friends[Jams,Martin];
}
Person.prototype.sayFriendsfunction()
{alert(this.friends);
}; // Person.prototype { // constructor: Person, // sayFriends: function() { // alert(this.friends); // } // }; var person1 new Person(kevin,31,SE);
var person2 new Person(Tom,30,SE);
person1.friends.push(Joe);
person1.sayFriends();//Jams,Martin,Joe
person2.sayFriends();//Jams,Martin 优点使用构造函数来创建实例属性且可以修改设定的值。使用原型创建共享方法和共享的属性。最大限度的节省了内存。 7. 动态原型模式 这个模式的好处在于看起来更像传统的面向对象编程具有更好的封装性因为在构造函数里完成了对原型创建。这也是一个推荐的创建对象的方法。动态原型模式将上面的对象原型方法||属性的创建方法哦了构造函数里面完成。具有更好的封装性。结果是一样的。 function Person(name,age,job)
{//属性this.namename;this.ageage;this.jobjob;this.friends[Jams,Martin];//方法if(typeof this.sayName ! function){Person.prototype.sayNamefunction(){alert(this.name);};Person.prototype.sayFriendsfunction(){alert(this.friends);};}
}var person new Person(kevin,31,SE);
person.sayName();
person.sayFriends(); 另外还有两个创建对象的方法寄生构造函数模式和稳妥构造函数模式。由于这两个函数不是特别常用这里就不给出具体代码了。 写了这么多创建对象的方法其实真正推荐用的也就是方法6和方法7。当然在真正开发中要根据实际需要进行选择也许创建的对象根本不需要方法也就没必要一定要选择它们了。 转载于:https://www.cnblogs.com/changyangzhe/p/5721968.html