简单 javascript 'new' 关键字
Simple javascript 'new' keyword
我创建了简单的对象
var myobject={
sum:function(){
console.log('sum')
},
sub:function(){
console.log('sub')
}
}
然后我从上面的对象创建了新对象,如:-
var newmyobject=new Object(myobject);
最后,我向新对象添加了一个 属性,例如:-
newmyobject.mult=function(){
console.log('multi');
}
现在的问题是,当我这样做时
console.log(myobject);
console.log(newmyobject);
两者都显示相同的结果。我原以为 "mult()" 应该只在 newmyobject 中。
new Object(obj)
不创建副本,它只是 returns obj
作为一个对象,它已经是一个对象。你可以这样做:
var newmyobject = Object.create(myobject)
newmyobject.mult = function() {
console.log('multi');
}
myobject.isPrototypeOf(newmyobject) // true
现在 newmyobject
将从 myobject
继承 sub
和 sum
,而 mult
将是自己的 属性.
new
用于构造函数,例如:
function MyObject() {}
MyObject.prototype.sum = function(){}
MyObject.prototype.sub = function(){}
var obj = new MyObject
obj.mult = function(){}
obj instanceof MyObject // true
我创建了简单的对象
var myobject={
sum:function(){
console.log('sum')
},
sub:function(){
console.log('sub')
}
}
然后我从上面的对象创建了新对象,如:-
var newmyobject=new Object(myobject);
最后,我向新对象添加了一个 属性,例如:-
newmyobject.mult=function(){
console.log('multi');
}
现在的问题是,当我这样做时
console.log(myobject);
console.log(newmyobject);
两者都显示相同的结果。我原以为 "mult()" 应该只在 newmyobject 中。
new Object(obj)
不创建副本,它只是 returns obj
作为一个对象,它已经是一个对象。你可以这样做:
var newmyobject = Object.create(myobject)
newmyobject.mult = function() {
console.log('multi');
}
myobject.isPrototypeOf(newmyobject) // true
现在 newmyobject
将从 myobject
继承 sub
和 sum
,而 mult
将是自己的 属性.
new
用于构造函数,例如:
function MyObject() {}
MyObject.prototype.sum = function(){}
MyObject.prototype.sub = function(){}
var obj = new MyObject
obj.mult = function(){}
obj instanceof MyObject // true