惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
爱范儿
爱范儿
H
Help Net Security
V
Visual Studio Blog
J
Java Code Geeks
Stack Overflow Blog
Stack Overflow Blog
Microsoft Security Blog
Microsoft Security Blog
Apple Machine Learning Research
Apple Machine Learning Research
MyScale Blog
MyScale Blog
The Cloudflare Blog
Martin Fowler
Martin Fowler
D
Docker
腾讯CDC
F
Fortinet All Blogs
雷峰网
雷峰网
GbyAI
GbyAI
G
Google Developers Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Recent Announcements
Recent Announcements
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Blog — PlanetScale
Blog — PlanetScale
Engineering at Meta
Engineering at Meta
博客园 - 聂微东
博客园 - 叶小钗

博客园 - 咖啡色

拆解 Claude Code 源码:如何用软件工程思维约束 AI? 为什么要在.Net Core中使用MediatR library? Let’s Encrypt 项目计划自动化地提供免费的 CA 证书 论C#逼格手册 这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑) Entity Framework where语句起作用的真正用法 ASP.NET Page_Load执行两次 .NET:在ASPX、ASHX和MVC中使用IOC容器(菜鸟必看) [转]SqlServer 表分区详细介绍 HttpPostedFileBase always null when upload file by asp.net mvc4 mobile 一步步构建大型网站架构 TCP/IP网络协议的通俗理解,socket,http,soap。 精妙Sql语句备忘 解决.net绘制的 WinForm 在 windows7下变形的方法 关于 ASP.net + JQuery + JQGrid + JSON.net 的简单应用(一) Entity Framework 连接 mysql 5.0出现的问题及解决方案 VSTO开发中VS2010和Office 2003的问题及解决方案 如何使用缓存提高程序性能 程序员装逼指南(网上看到的,笑喷了……)
如何用Javascript写一个Class?
咖啡色 · 2011-10-14 · via 博客园 - 咖啡色

记得前面某次面试被问到此问题,一直以来因为对JS的不重视+一知半解,所以当时就懵了~

最近Google了下,找到以下几种写Class的方式:

1 JS因为不是OO语言,所以没有Class的概念,都是通过ProtoType的方式实现的。

var namedClass = Class.create({
    initialize: function(name) {
        this.name = name;
    }
 
    getName: function() {
        return this.name;
    }
});
var instance = new namedClass('Foobar');

2 也可以这样写

function MyClass(){
}
MyClass.prototype.aFunction(){ 
}
 
var instance = new MyClass();
instance.aFunction();

3 带属性和方法的Class

function MyClass () {
   //reference to this
   var self = this;
   //private member variable
   var privateVar = "My Private Variable";
 
   //public member variable
   this.publicVar = "My Public Variable";
 
   //private member function
   var privateFunction = function () {
      self.publicVar += " Modified By A Private Fucntion";
      alert( self.publicVar );
   }
}
 
//create an instance
var oClass = new MyClass();
 
//run a private member function
oClass.privateFunction();   //private function is undefined
 
//get a private member var
alert( oClass.privateVar );   //private var is undefined

4 带静态变量和静态方法的Class:

function MyClass () {
   //...
}
//declare a static member
MyClass.staticVar = "My static variable";
 
//declare a static function
MyClass.staticFunction = function ( pInput ) {
   return new MyClass( MyClass.staticVar , pInput );
}
//create an instance
var oClass = new MyClass();
//run a static function (NO access to private or public)
oClass.staticFunction( 9 );  //staticFunction is undefined on an instance
//run a privileged member function on the class
MyClass.privilegedFunction();   //The function runs

5 带特权(privileged)变量和方法的Class:

function MyClass () {
   //private member variable
   var privateVar = "My Private Variable";
   //privileged member function
   this.privilegedFunction = function () {
      alert( privateVar );
   }
}
//create an instance
var oClass = new MyClass();
//run a privileged member function
oClass.privilegedFunction();   //Output: alerts the value of the private var