Sea*_*one 59 javascript oop class
我想知道 - JavaScript对象,类和函数之间有什么区别?我是否正确地认为类和函数是对象的类型?
什么能够将一个类与一个函数区分开来?或者它们真的是一样的,只是它们的用语根据它们的使用方式而变化?
function func() { alert('foo'); } // a function
func(); // call the function - alerts 'foo'
var func2 = function () { alert('hello'); } // acts the same way as 'func' surely?
func2(); // alerts 'hello'
var Class = function() { alert('bar'); }; // a class
var c = new Class(); // an istance of a class - alerts 'bar'
Run Code Online (Sandbox Code Playgroud)
当然,类有方法和属性,可以实例化 - 但是,我可以对任何旧函数做同样的事情 - 或者不是吗?
Aad*_*hah 54
正如您现在必须知道的那样,JavaScript中没有类.相反,通过在函数调用之前使用new关键字,可以使JavaScript中的函数表现得像构造函数.这称为构造函数模式.
在JavaScript中,除了原始数据类型(布尔值,数字和字符串)和之外,一切都是对象undefined.另一方面null,实际上是一个对象参考,即使你可能首先相信.这就是typeof null回归的原因"object".
JavaScript中的函数类似于Lua中的functable(即它们是可调用对象).因此,可以使用函数来代替对象.类似地,数组也是JavaScript中的对象.另一方面,对象可以被认为是关联数组.
然而,最重要的一点是JavaScript中没有类,因为JavaScript是一种原型面向对象的语言.这意味着JavaScript中的对象直接从其他对象继承.因此我们不需要课程.我们所需要的只是一种创建和扩展对象的方法.
阅读以下主题以了解有关JavaScript中原型继承的更多信息:原型继承优于经典原型?
Neo*_*ptt 37
在javascript中有一些类,它们只是在旧浏览器中不使用.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes
它具有构造函数,扩展等.
class Cat {
constructor(name) {
this.name = name;
}
speak() {
console.log(this.name + ' makes a noise.');
}
}
class Lion extends Cat {
speak() {
super.speak();
console.log(this.name + ' roars.');
}
}
Run Code Online (Sandbox Code Playgroud)
lox*_*xxy 16
JS中的一个类:
function Animal(){
// Private property
var alive=true;
// Private method
function fight(){ //... }
// Public method which can access private variables
this.isAlive = function() { return alive; }
// Public property
this.name = "Joe";
}
// Public method
Animal.prototype.play = function() { alert("Bow wow!"); }
// .. and so on
Run Code Online (Sandbox Code Playgroud)
现在当你创建它的对象时
var obj = new Animal();
Run Code Online (Sandbox Code Playgroud)
您可以像使用其他语言的对象一样期待此对象的任何内容.只是努力实现它,有点不同.您还应该在JS中查看继承.
回到你的问题,我会改为:
Class : A representation of a set with common properties.
object : One from the set with the same properties.
var Class = function() {alert('bar');}; // A set of function which alert 'bar'
var object = new Class(); // One of the functions who alert's 'bar'.
Run Code Online (Sandbox Code Playgroud)
JavaScript没有类,函数实际上是JavaScript中的对象(一等公民).函数对象的唯一区别是它们是可调用的.
function func() { alert('foo'); } // a function - 正确
func(); // call the function - alerts 'foo' - 正确
var func2 = function () { alert('foo'); } // same as 'func' surely?- 不,func2是一个不同的对象,在调用时显然做同样的事情.
var Class = function() { alert('bar'); };- 这是一个没有名称存储在变量中的函数Class.
var c = new Class();- 调用存储在Class提供新空对象this和返回该对象的函数.被调用的函数new functionA()应该作为构造函数工作并准备一个新创建的对象(this).在你的情况下 - 构造函数不对对象做任何事情,只是警告bar.
javascript 中没有类。但是,有一些方法可以使函数的行为类似于其他语言中的类。
这里给出了很好的解释3 way to Define a class in js
另外,找到了关于Javascript 中的 OOP的非常好的参考资料
小智 6
您还可以在 ES6 中获得如下所示的类:
//class
class Cat {
//constructor
constructor() {
this.name = 'Snowball';
}
//method
meow() {
console.log('Hello, nyah! My name is ' + this.name + ' nyah!~');
}
};
Run Code Online (Sandbox Code Playgroud)