将信息直接添加到原型对象上。应用原型的好处是可以让所有的实例对象共享它所包含的属性和办法,不必在构造函数中定义对象实例信息。
更简单的写法
动态原型模式将所有信息都封装在了构造函数中,初始化的时刻,经由过程检测某个应当存在的办法时刻有效,来决定是否须要初始化原型
- function Person() {
- }
- Person.prototype = {
- name: 'jiang',
- job: 'student',
- sayName: function() {
- console.log(this.name)
- }
- }
- var person1 = new Person()
将Person.prototype设置为等于一个以对象字面量情势创建的对象,然则会导致.constructor不在指向Person了。
应用这种方法,完全重写了默认的Person.prototype对象,是以 .constructor也不会存在这里
- Person.prototype.constructor === Person // false
如不雅须要这个属性的话,可以手动添加
- function Person() {
- }
- Person.prototype = {
- constructor:Person
- name: 'jiang',
- job: 'student',
- sayName: function() {
- console.log(this.name)
- }
- }
不过这种方法照样不敷好,应为constructor属性默认是弗成列举的,如许直接设置,它将是可列举的。所以可以时刻,Object.defineProperty办法
缺点
应用原型,所有的属性都将被共享,这是个很大年夜的长处,同样会带来一些缺点
原型中所有属性实例是被很多实例共享的,这种共享对于函数异常合适。对于那些包含根本值的属性也勉强可以,毕竟实例属性可以樊篱原型属性。然则引用类型值,就会出现问题了
- function Person() {
- }
- Person.prototype = {
- name: 'jiang',
- friends: ['Shelby', 'Court']
- }
- var person1 = new Person()
- var person2 = new Person()
- person1.friends.push('Van')
- console.log(person1.friends) //["Shelby", "Court", "Van"]
- console.log(person2.friends) //["Shelby", "Court", "Van"]
- console.log(person1.friends === person2.friends) // true
friends存在与原型中,实例person1和person2指向同一个原型,person1修改了引用的数组,也会反竽暌功到实例person2中
这是应用最为广泛、认同度最高的一种创建自定义类型的办法。它可以解决膳绫擎那些模式的缺点
推荐阅读
在“暗网(Dark Web)” 上出现了两款针对 Mac 电脑的全新恶意软件,这两款 Mac 恶意软件分别是 MacSpy 和 MacRansom ,并经由过程 Maas 和 Raas 方法进击。两款恶意软件来自一个>>>详细阅读
本文标题:JavaScript创建对象的七种方式
地址:http://www.17bianji.com/lsqh/35768.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示