js 创建对象与继承

 

简单工厂:不能体现类型,函数重复(js函数也是对象)占内存

组合构造函数式与模型式:1.函数放在prototype中   2.引用属性要放在构造函数中  3.若重赋值Person.prototype=...  要改constructor属性值,并注意改写语句前创建的实例的prototype仍指向原来的原型对象

最佳:动态原型模式:判断原型中的某个属性或函数是否存在,不存在则赋值。  解决了上述实例与新建原型脱离关系的问题(原实例的__proto__指针指向原来的prototype,构造函数的prototype指向新的prototype)

寄生构造函数模式

 

继承

原型继承

原型链的问题:原型链继承引用类型的时候,该变量会被所有子类实例共享(虽然普通类型也会被共享,但普通类型只能用=之类,会重写,引用类型会用push操作之类) 本质就是直接引用所带来的问题,所以不能直接指向父类的原型,那就指向父类的对象?那样子类原型中会有父类对象的属性(多余,不是纯粹的只继承原型)。指向父类原型不好,指向父类对象也不好,那只好指向一个中间对象,而中间对象的原型指向父类原型。

 借用构造函数继承:SuperClass.call(this)

组合原型链和构造函数式继承

最佳继承:寄生组合式继承、

 

  1 //继承原 2 function inheritPrototype(Sub, Sup)  3 new Sup(); //此处防止继承时父类的prototype还没赋值 4 //Sub.prototype=Sup.prototype;改变子类的原型会改变父类原型 5 //Sub.prototype= new Sup();会继承类上的属性也会继承原型上的属性,导致类上的属性重复

 6   function F() {}  7   F.prototype = Sup.prototype;  8   var f = new F();  9   f.constructor = Sub; //这个constructor会加到对象f上,而不会改变F.prototype.constructor
10   Sub.prototype = f; 11 } 12 
13 //动态原型式构造函数
14 function Person(name, skills) { 15   this.name = name || ''; 16   this.skills = Array.isArray(skills) ? skills : []; 17   if (typeof Person.prototype.learn !== 'function') { 18     Person.prototype = { 19  constructor: Person, 20       learn: function() { 21         console.log(this.name + " learn " + this.skills.join(',')); 22  } 23  }
28 } 29 } 30 31 //寄生组合式继承 32 function Man(name, skills) { 33 Person.call(this, name, skills); 34 this.sex = 'male'; 35 } 36 37 inheritPrototype(Man, Person);

 

 

 

splice(下标,删除数目,添加项...)
slice(begin,end)不改变元数组
迭代every(ele,index,arr),some,forEach,filter,map
归并 reduce(function(pre,cur,index,arr)【,initialValue】)
reduceRight( 同上)
func.call(this,a,b,c)
func.apply(this,[a,b,c])
每个函数都有一个prototype属性,他是一个指针,指向一个对象,用途是包含由特定类型的所有实例所共享的属性和方法。
obj {constructor hasOwnProperty() isPrototypeOf() }

indexOf(ele【,fomindex】)

lastIndexOf

转载于:https://www.cnblogs.com/miaolq/p/5726462.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值