关于javascript中的new
PHP中文网
PHP中文网 2017-04-10 17:03:06
0
4
329

想请教一下各位,
这段代码为何返回的不是2?

var B=function(obj){
    if(obj){
        return obj;
    }
}
console.log(new B(2))  //输出:B{}

,而如果参数是引用类型就会返回参数,呵呵

console.log(new B([1,2,3]))  //输出:[1,2,3]
PHP中文网
PHP中文网

认证高级PHP讲师

全員に返信(4)
伊谢尔伦

JS就是这样的,当构造函数中没用return时返回this,有return且返回的为对象时返回该对象,否则仍然返回this

いいねを押す +0
左手右手慢动作

JS使用new实现创建对象,大致3步:
1.obj=new Object();
2.constructor.call(obj);
3.obj.prototype=constructor.prototype
默认返回obj;如果需要返回自定义数据,必须是对象,你只是返回一数值类型,所以只是一个对象{};如果要返回2,需要使用
return {num:2};就会返回这个对象

いいねを押す +0
小葫芦

new 出来的一定是object啊。

いいねを押す +0
大家讲道理

可以这么来理解,第一次你输入的是2,2是一个纯粹最基本基础类型。(他不是对象),所以你将2传入的时候,因为在B这个函数中并没有赋初值,所以,这个函数就直接当成构造函数,就创建了一个空对象。而你传入一个数组的时候,因为数组也是一个对象,所以返回数组。还有就是,new这个关键字在js中其实并没有像其他面向对象语言一样实例化了一个对象(因为js本身没有类,而全是对象),而只是创建了一个空对象(如果有赋初值就赋予对象中的属性)。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!