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

推荐订阅源

A
About on SuperTechFans
博客园 - 聂微东
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 司徒正美
宝玉的分享
宝玉的分享
美团技术团队
量子位
The Cloudflare Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
IT之家
IT之家
爱范儿
爱范儿
J
Java Code Geeks
博客园 - Franky
Last Week in AI
Last Week in AI
B
Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
I
InfoQ
GbyAI
GbyAI
Recent Announcements
Recent Announcements
小众软件
小众软件
H
Help Net Security
Microsoft Azure Blog
Microsoft Azure Blog
MyScale Blog
MyScale Blog

博客园 - 咖啡色

拆解 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