js 攻坚克难

new

new : 官方解释: 如果在一个函数前面带上new来调用,那么背地里将会创建一个连接到该函数的prototype的成员的新对象,同时this会被绑定到哪个新对象上;

new 是用来创建对象的;
当在自定义的function类型前使用new时,只有当函数无返回时才有区别;

当无返回值时:使用new可以获得对象,不使用new就是执行一个普通的函数;
当有返回值时:使用new与否结果都是一样的。

prototype 与 __proto__

只有类型才有prototype;  比如 Object ,Function,Boolean以及自定义的function
对象才会有__proto__;并且对象的__proto__执行类型的prototype;
Math有__proto__但是没有prototype,因为它是对象,但不是类型。
  var Quo = function (str){
  		this.status = str;
  	}
  //只有类型才能访问到prototype
  Quo.prototype.getStatus = function (){ 
  		return this.status;
  	};
  	var myQuo2 = new Quo("c222");
  	var myQuo = new Quo("confused");
  //对象的__proto__执行类型的prototype
  	myQuo.__proto__.gstatus = function (){
      alert(2222);
    }
  	alert(myQuo.getStatus());
  myQuo.gstatus();
  //原型被人改变了
  myQuo2.gstatus();


模块模式 与原型链模式

原型链模式是将方法添加到原型上面,模块模式是使用闭包将模拟class的格式;

  /*模块模式*/
  var obj  = function (){
    this.name = "wch";
    function getName(){return name;};
    function setName(n){name = n;};
		return {getName:getName,setName:setName}
  };
  
  
  /*原型链模式*/
  var Quo = function (str){
  		this.status = str;
  	}
  Quo.prototype.getStatus = function (){ 
  		return this.status;
  	};	
  	var myQuo = new Quo("confused");
  	alert(myQuo.getStatus());


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值