方方写的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.兵种 = “美国大兵”
第二种方式会麻烦一点,但是不会不小心覆盖其他的属性,推荐使用。
例如:
-
var object = new Object()
自有属性:空
共有属性:
object.proto === Object.prototype
-
var array = new Array('a','b','c')
自有属性:0:'a' 1:'b' 2:'c',length:3
共有属性:
array.proto === Array.prototype
Array.prototype.proto === Object.prototype
-
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
网友评论