构造函数添加方法,为什么必须用.prototype往原型上添加方法,实例才能调用,否则undefined

云端的日子
  • 66

可能我过于较真

function Student(name, age, sex) {
  this.name = name
  this.age = age
  this.sex = sex
}

Student.sayHi = function () {
  console.log('大家好 我是' + this.name)
}

Student.test = 'abc'

构造函数Student也是对象,为什么不能通过.sayHi直接添加方法呢?无论添加属性还是方法都添加不上

console.log('Student', Student);

Student ƒ Student(name, age, sex) {
this.name = name
this.age = age
this.sex = sex
}

回复
阅读 1.1k
2 个回答

学过 Java / C# / Golang 一类的 OOP 强类型语言吗?

这就是基本的静态方法和类方法的区别。

P.S. C# 3.0 后增加了可以在实例里访问静态方法的特性,但本质是个语法糖。

可以看下ES6的classs基本语法:https://es6.ruanyifeng.com/#docs/class

上面Student其实就是一个class类,只是constructor可写、可不写。

所以需要new Student()实例化后,才能进行使用里面对应的变量与方法;

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏