为了账号安全,请及时绑定邮箱和手机立即绑定

为什么调用一个方法需要用new 关键字?

var stock=new getStock("IBM");

正在回答

5 回答

关于你提到的为什么要用new关键字这个问题,因为上面的getStock是一个构造函数,所以要用new关键字来将构造函数实例化成一个对象,当然在本视频中老师这个写法略有些不规范,平常开发中默认构造函数以大写字母开头。

0 回复 有任何疑惑可以回复我~

this.name=name,这个this指向实例化后的对象。this在js里一共有四种指向,作为对象属性调用时指向对象,作为函数调用时指向执行这个函数的对象,作为构造函数调用时指向实例化后的对象,在call和apply中指向自己定义的对象。

0 回复 有任何疑惑可以回复我~

你试试把new去掉后是什么效果。你会发现为什么去掉后是想要的结果。这里视频里this.name的this指向的是方法。setInterval里面的this指向的是全局的global,一般是window对象。所以才输出空。如果将new去掉,都指向的window,前面的this给全局对象的name赋值,后面也就获得到值了。这里涉及到一些js的基础也比较底层的知识,可以看一下。

针对代码,可以这么写,自己琢磨一下,有new和没有new的区别。我把setInterval换成了setTimeout,原理不变:

function getSocktet(name: String) {
    this.name = name;
    console.log(this);
    setTimeout(function () {
        console.log(this);
    },1000);
}

var stock = getSocktet("IBM");


1 回复 有任何疑惑可以回复我~

我也没动,前面明明是一个函数,直接调用就行了,为什么要用实例化类的方法来调用这个函数呢?

0 回复 有任何疑惑可以回复我~
#1

MIT的梦

看一下我的回答
2017-09-17 回复 有任何疑惑可以回复我~

这里其实是声明了一个构造函数(或者说“类”也可以),叫getStock,一般用名词会好理解一点,这里用了动词所以会有一些误解。因为是构造函数,所以前面要加 new,实例化出来一个stock对象,实例化过程中构造函数被执行,setInterval()函数被调用。这是JS面向对象的基础知识。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
TypeScript入门
  • 参与学习       59374    人
  • 解答问题       99    个

TypeScript入门视频教程包括TypeScript的基本概念、常用语法和高级特性

进入课程

为什么调用一个方法需要用new 关键字?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信