new范式·2个例子

一段代码:

var controller = {
	notify: function(obj){
		obj.notify();
	}
}

var base_obj = {
	notify: function(){
		alert('base');
	}
}

function f(){
        f.prototype = base_obj; //注意这句
	this.notify = function(){
       alert('sub');
	}
}

var sub_obj = new f();

controller.notify(base_obj);
controller.notify(sub_obj);

console.log(sub_obj.constructor ===  base_obj.constructor); //false 
console.log(base_obj.constructor === Object); //true;
console.log(sub_obj.constructor ===  f); //true
console.log(sub_obj.__proto__ === base_obj) //false
-->月影的有关js new的范式:

function f(){
    this.a = 1;
    this.b = "str";
}
var c = new f;

<==>

var d = g(){};
g.prototype = f.prototype;
var h = new g();
f.call(h);

因此这段:

function f(a){
    f.prototype = baseObj; //注意new这个过程的范式表达过程的顺序;
    this.x =a;
}

new的语义上实现的过程是 - Constructor的执行是在new过程设置prototype对象之后才进行的;因此
subObj对象的__proto__其实引用着还是老的,原有的function f的prototype对象;而在第一次new之后
才f的prototype才被设为baseObj;

e.g.: 单根实例的实现可以是:

function f(){
    f = null;
    this.x = 10;
}

var d = new f();
try{
    var  c = new f();
}
catch(e){}




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值