栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JavaScript中的类与静态方法

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JavaScript中的类与静态方法

首先,请记住Javascript主要是一种原型语言,而不是基于类的语言1。

Foo
不是一个类,而是一个函数,这是一个对象。您可以使用关键字从该函数实例化一个对象,该
new
关键字将允许您使用标准OOP语言创建类似于类的内容。

我建议

__proto__
大部分时间都忽略它,因为它对跨浏览器的支持很差,而应该专注于了解其
prototype
工作原理。

如果您有一个从函数2创建的对象的实例,并且以任何方式访问其成员之一(方法,属性,属性,常量等),则访问将沿原型层次结构进行,直到(a)找到成员,或(b)找不到其他原型。

层次结构从被调用的对象开始,然后搜索其原型对象。如果原型对象具有原型,则重复该操作(如果不存在原型),

undefined
则返回该对象。

例如:

foo = {bar: 'baz'};console.log(foo.bar); // logs "baz"foo = {};console.log(foo.bar); // logs undefinedfunction Foo(){}Foo.prototype = {bar: 'baz'};f = new Foo();console.log(f.bar);// logs "baz" because the object f doesn't have an attribute "bar"// so it checks the prototypef.bar = 'buzz';console.log( f.bar ); // logs "buzz" because f has an attribute "bar" set

在我看来,您已经至少已经对这些“基本”部分有所了解,但是为了确保它们,我需要使它们明确。

在Javascript中,一切都是对象3。

一切 都是对象。

function Foo(){}
不仅定义了一个新函数,还定义了一个可以使用访问的新函数对象
Foo

这就是为什么您可以使用来访问

Foo
的原型的原因
Foo.prototype

你也可以做的是设置 更多的功能

Foo

Foo.talk = function () {  alert('hello world!');};

可以使用以下方式访问此新功能:

Foo.talk();

我希望到目前为止,您已经注意到函数对象上的函数与静态方法之间的相似性。

可以将其

f = new Foo();
视为创建类实例,
Foo.prototype.bar =function(){...}
为该类定义共享方法以及为该类
Foo.baz = function(){...}
定义公共静态方法。


ECMAscript 2015为此类声明引入了多种语法糖,以使其更易于实现,同时也更易于阅读。因此,前面的示例可以写成:

class Foo {  bar() {...}  static baz() {...}}

它可以

bar
被称为:

const f = new Foo()f.bar()

并被

baz
称为:

Foo.baz()

1:

class
是ECMAscript5规范中的“未来保留字”,但是ES6引入了使用
class
关键字定义类的功能。

2:本质上是由构造函数创建的类实例,但是有很多细微的差别我不想误导你

3:基本值(包括

undefined
,,
null
布尔值,数字和字符串)在技术上不是对象,因为它们是低级语言实现。布尔值,数字和字符串仍然像它们是对象一样与原型链交互,因此,出于此答案的目的,即使它们不是完全一样,也更容易将它们视为“对象”。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/464575.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号