关键字new能做的事情

2020-09-05  本文已影响0人  凉城十月

方方写的new的解析
这篇文章基于上述链接。

关键字new能做两件事情,
1.添加自有属性
2.添加共有属性

function 士兵(id){
  //var temp = {} //1
  //this = temp //2
  //士兵.prototype = {constructor: 士兵 } //直接赋值会覆盖原有的值
  //this.__proto__ = 士兵.prototype //3
  this.ID =id, //ID不能重复
  this.生命值 = 42//自有属性
  //实际工作中不要这样写,因为__proto__不是标准属性
  //return this //4
  //语法糖
}

士兵.prototype = {
   //共有属性
  兵种: "美国大兵",
  攻击力: 5,
  行走: function(){/*走俩步的代码*/},
  ……
}

以上代码被 //掉的代码都是内部已经帮你实现的代码,可以省略不写的

【注意一个点】
//士兵.prototype = {constructor: 士兵 }//直接赋值会覆盖原有的值
有两种方法解决:
1.在 士兵.prototype的对象中重新赋值,添加 constructor: 士兵
2.不将 士兵.prototype直接赋值,选择添加。
士兵.prototype.兵种 = “美国大兵”
第二种方式会麻烦一点,但是不会不小心覆盖其他的属性,推荐使用。

例如:

  1. var object = new Object()
    自有属性:空
    共有属性:
object.proto === Object.prototype
  1. var array = new Array('a','b','c')
    自有属性:0:'a' 1:'b' 2:'c',length:3
    共有属性:
array.proto === Array.prototype
Array.prototype.proto === Object.prototype
  1. var fn = new Function('x', 'y', 'return x+y')
    自有属性 :length:2, 不可见的函数体:'return x+y'
    共有属性:
fn.proto === Function.prototype
Array is a function
Array = function(){...}
Array.proto === Function.prototype
上一篇 下一篇

猜你喜欢

热点阅读