轻量级前端框架助力开发者提升项目效率与性能
640
2022-09-06
JS创建对象
虽然Object构造函数或者对象字面量都可以创建单个对象,,明显的缺点是使用一个接口创建很多对象,会产生大量的重复代码。
一、工厂模式
function createPerson(name, age, job){ var o = new Obejct(); o.name=name; o.age=age; o.job=job; o.sayName=function(){ alert(this.name); }; return o;}var person1=createPerson("Nicol",29,"software engineer");var person2=createPerson("Greg",27,"doctor");
没有解决对象的识别问题。
二、构造函数模式
function Person(name, age, job){ this.name=name; this.age=age; this.job=job; this.sayName=function(){ alert(this.name); };}var person1=new Person("Nichol",29,"software engineer");var person2=new Person("Greg",27,"doctor");
不同之处:
没有显示地创建对象;
没有直接将属性和方法赋给this对象
没有return语句;
构造函数的问题:每个方法都要在每个实例上重新创建一遍。以这种方式创建函数,会导致不同的作用域链和标识符解析,因此,不同实例上的同名函数是不相等的。
alert(person1.sayName == person2.sayName); //false
可以通过把函数定义转移到构造函数外部来解决这个问题。
function Person(name, age, job){ this.name = name; this.age=age; this.job=job; this.sayName=sayName;}function sayName(){ alert(this.name);}
这样的问题是,在全局作用域调用的函数实际上只能被某个对象调用。
三、原型模式
我们创建的每个函数都有一个prototype属性,这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法。
这种方法不必在构造函数中定义对象实例的信息,可以将信息直接添加到原型对象中。
function Person(){}Person.prototype.name="Nicholas";Person.prototype.age=29;Person.prototype.job="software engineer";Person.prototype.sayName = function(){ alert(this.name);};var person1=new Person();person1.sayName();var person2=new Person();person2.sayName();alert(person1.sayName == person2.sayName);
方法:
Object.keys()
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~