组合使用构造函数模式和原型模式,是创建自定义类型的最常见方式。构造函数模式用于定义实例属性,而原型模式用于定义方法和共享的属性。结果,每个实例都会有自己的一份实例属性的副本,但同时又共享着对方法的引用,最大限度的节省了内存。
function Person(name,age,job){ this.name= name; this.age = age; this.job = job; this.friends = ['wang','li']; } Person.prototype = { constructor:Person, sayName : function(){ alert(this.name); } } var person1 = new Person('zhang',26,'java',); var person2 = new Person('sun',25,'php'); person1.friends.push('zhao'); alert(person1.friends); //'wang,li,zhao' alert(person2.friends); //'wang,li' alert(person1.friends === person2.friends); //false
在上面的例子中,实例属性都是在构造函数中定义的,而由所有实例共享的属性constructor和方法satName()则是在原型中定义的。而修改了person1.friends(向其中添加一个新字符串),并不会影响到person2.friends,因为他们分别引用了不同的数组。
更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》