在js继承当中,这种寄生式继承当中什么叫做获得当前对象的一个克隆呀

function Parent() {
this.color = ['pink', 'red'];
}

function createAnother(o) {
    // 获得当前对象的一个克隆
    var another = new Object(o);
    // 增强对象
    o.sayHi = function() {
            console.log('Hi');
        }
    // 返回对象
    return another;
}

new Object()函数接受一个对象参数o,就是复制o对象的所有属性与方法到新建的对象another之中。它返回了一个与原对象拥有相同属性与方法的新对象,而原对象没有改变,跟克隆了一个对象一样,所以叫做“获得当前对象的一个克隆”

var another = new Object(o);这个并不是克隆对象。
这与 var another = o; 没有什么区别。
只是让another 和 o 指向同一个对象的引用地址而已。

var another = new Object(o);并不能克隆对象。

调用Object构造器创建对象时,当o为:
1. null、undefined,返回空对象;
2. Boolean,返回相同的新布尔值;
3. Number,返回相同的新数值;
4. String,返回相同的新字符串;
5. Object,返回原对象。

应该用var another = Object.create(o);比较合适些

或者var another = Object.assign(o);

不过Object.assign只能实现浅拷贝

你可能遇见了一个假的寄生继承了。
寄生继承是想得到一个新的对象,然后在起上面添加方法,目的也是为了继承之后的对象添加新方法不影响原对象。
new Object()显然不行的
用Object.create()才是正解,不过在以前没有Object.create的时候,为了实现这个
如果没记错应该是这样的
var fn = function () {}, fn.prototype = o; var newObj = new fn();