我是javascript的新手;并且我正在挖掘'新'变量。
我的气氛是:
function Fruit(name)
{
this.name = name;
}
function myNew(con,args){
var obj = {};
obj = con.apply(obj,args) || obj;
obj.constructor = con;
return obj;
}
var f1 = new Fruit("Mango");
var f2 = myNew(Fruit,["Orange"]);
console.log(f1.name, f1 instanceof Fruit);
console.log(f2.name, f2 instanceof Fruit);
现在我得到的输出是:
芒果真的
橙色假
如果我需要输出,我需要做什么: 芒果真的 橙色真实..
我需要一些解释。
我不知道是否有人已经回答了这个问题,但我无法找到它。
答案 0 :(得分:2)
让我们说我们有Foo构造函数。
function Foo(options) {
// constructor
this.name = options.name;
}
// and create instance of it
var foo = new Foo({name: "Foo"});
从MDN参考文献中,“new”运算符执行:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new
所以基本上它设置对象原型并执行构造函数,返回一个对象,除非构造函数不返回任何其他内容。
“apply”函数instend,仅在特定上下文中运行函数。它没有设置继承。在你的情况下,它只是在你的自定义obj的上下文中运行构造函数。
var obj = {};
你可以在这个小提琴上看到这个:
使用了“_ proto _”属性,看看原型链中的什么。不要在开发中使用它。
如果您想要所需的效果,您应该使用 giorgio 建议的内容。
答案 1 :(得分:1)
您应该使用prototype property来定义您的对象基于其他对象
function myNew(con,args){
var obj = {};
obj = con.apply(obj,args) || obj;
obj.prototype = con;
return obj;
}
答案 2 :(得分:1)