菜鸟一枚,刚学javascript,有个实例化对象的问题想问一下各位:
function b() {
alert(1);
}
var a = new b();
alert(a());
function b() {
alert(1);
}
var a = new b();
alert(a);
我想要实例化函数b然后输出1,但是上面两种都不行,请问为啥。。第一种在浏览器上报错,第二种是Object object/(ㄒoㄒ)/~~
菜鸟一枚,刚学javascript,有个实例化对象的问题想问一下各位:
function b() {
alert(1);
}
var a = new b();
alert(a());
function b() {
alert(1);
}
var a = new b();
alert(a);
我想要实例化函数b然后输出1,但是上面两种都不行,请问为啥。。第一种在浏览器上报错,第二种是Object object/(ㄒoㄒ)/~~
应该是第一个会报错吧,因为a不是一个函数,会报typeerror。
首先要了解的概念是new
操作究竟做了什么,它返回的是什么。下面是一个简单实现new
函数。
const myNew = function(fn, ...args) {
let obj = {};
obj.__proto__ = fn.prototype;
let ret = fn.call(obj, ...args);
return typeof ret === "object" ? ret : obj;
};
我们可以看到返回的是一个对象或者函数的return结果。
了解了这些就好办了。
function b() {
return () => 1
}
let a = new b();
alert(a())
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
你是没搞清楚new是什么意思,继承相关的内容:
new实际上在构造函数运行时继承了父级的原型对象的同时改变了this指向:
继承这块不太好懂,慢慢来吧