squ*_*oid 3 javascript object new-operator
我创建了简单的对象
var myobject={
sum:function(){
console.log('sum')
},
sub:function(){
console.log('sub')
}
}
Run Code Online (Sandbox Code Playgroud)
然后我从上面的对象创建了新对象,如: -
var newmyobject=new Object(myobject);
Run Code Online (Sandbox Code Playgroud)
最后我向新对象添加了一个属性,如: -
newmyobject.mult=function(){
console.log('multi');
}
Run Code Online (Sandbox Code Playgroud)
现在的问题是,当我这样做
console.log(myobject);
console.log(newmyobject);
Run Code Online (Sandbox Code Playgroud)
两者都显示相同的结果.我期待"mult()"应该只在newmyobject中.
new Object(obj)不创建副本,它只是obj作为对象返回,它已经是一个对象.你可以做:
var newmyobject = Object.create(myobject)
newmyobject.mult = function() {
console.log('multi');
}
myobject.isPrototypeOf(newmyobject) // true
Run Code Online (Sandbox Code Playgroud)
现在,newmyobject将继承sub和sum从myobject,和mult将是自己的财产.
对于使用new是构造函数,例如:
function MyObject() {}
MyObject.prototype.sum = function(){}
MyObject.prototype.sub = function(){}
var obj = new MyObject
obj.mult = function(){}
obj instanceof MyObject // true
Run Code Online (Sandbox Code Playgroud)