javascript new

先上个例子代码:

 

function Animal(name, sex) {
    this.name = name;
    this.sex = sex;
}
Animal.color = "black";

Animal.prototype.heartBeat = true;
Animal.prototype.say = function () {
    console.log("My name is: " + this.name);
};

var cat = new Animal("cat", "female");

console.log("cat color:  " + cat.color);
console.log("cat heartBeat:  " + cat.heartBeat);
console.log("cat sex:  " + cat.sex);

console.log("animal color:  " + Animal.color);
console.log("animal heartBeat:  " + Animal.heartBeat);
console.log("animal sex:  " + Animal.sex);

 

伪代码说明new都做了什么:

 

var cat = new Animal("cat", "female")   等价于

var cat = {
    var obj = {};
    obj.__proto__ = Animal.prototype;  //这时原型继承的关键,新对象的__proto__指向了函数对象的原型对象
    Animal.call(obj, "cat", "female"); //新对象具有了函数对象中的动态属性和方法
    return obj;
}

 

手动写一个new:

function new_(originObj) {
    var obj = {};
    obj.__proto__ = originObj.prototype;
    originObj.call(obj, "cat", "female");
    return obj;
}
var cat = new_(Animal);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值