JavaScript: Class.method vs Class.prototype.method

在stack overflow中看到一个人回答,如下      

// constructor function
function MyClass () {
  var privateVariable; // private member only available within the constructor fn

  this.privilegedMethod = function () { // it can access private members
    //..
  };
}

// A ‘static method‘, it‘s just like a normal function
// it has no relation with any ‘MyClass‘ object instance
MyClass.staticMethod = function () {};   //first function

MyClass.prototype.publicMethod = function () {       //second function
  // the ‘this‘ keyword refers to the object instance
  // you can access only ‘privileged‘ and ‘public‘ members
};

var myObj = new MyClass(); // new object instance

myObj.publicMethod();
MyClass.staticMethod();

Yes, the first function has no relationship(有关) with an object instance of that constructor function, you can consider it like a ‘static method‘.

In JavaScript functions are first-class objects, that means you can treat them just like any object, in this case, you are only adding a property to the function object.

The second function, as you are extending the constructor function prototype, it will be available to all the object instances created with the new keyword, and the context within that function (the thiskeyword) will refer to the actual object instance where you call it.

简单理解:(MyClass.staticMethod ) 构造函数也是对象,可以在其上进行添加属性或方法,添加在其上的与对象实例无关

(MyClass.prototype.publicMethod)   这是扩展构造函数原型对象,用来与new关键字来创建所有对象实例。在函数中,this 指向的是实例对象。

参考地址:

时间: 2024-10-14 06:57:24

JavaScript: Class.method vs Class.prototype.method的相关文章

javascript Class.method vs Class.prototype.method(类方法和对象方法)

在stackoverflow上看到一个这样的提问,以下代码有什么区别? Class.method = function () { /* code */ } Class.prototype.method = function () { /* code using this.values */ } 看来确实有很多人和我一样对这个问题有疑问,实际上这个牵涉到static和dynamic方法的概念. Class.method这种模式定义的method是绑定在Class对象之上的.在js中,我们知道一切皆

JavaScript的数据类型都有什么? JavaScript中 toStirng() 与 Object.prototype.toString().call()

JavaScript的数据类型都有什么? (via  BAT互联网公司2014前端笔试面试题:JavaScript篇  http://www.sxt.cn/u/756/blog/4508) 基本数据类型:String,boolean,Number,Undefined, Null 引用数据类型: Object(Array,Date,RegExp,Function) 疑问:这些基本的数据类型的值都是常量,而常量是没有方法的,为什么能够调用方法呢?答案是这样的,五种基本类型除了null.undefin

javascript对象的属性,方法,prototype作用范围分析

读了篇博客感觉很有用"javascript对象的属性,方法,prototype作用范围分析"就自己写了一遍.以后自己可以用的到. 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://

Java程序猿的JavaScript学习笔记(5——prototype和Object内置方法)

计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript学习笔记(3--this/call/apply) Java程序猿的JavaScript学习笔记(4--this/闭包/getter/setter) Java程序猿的JavaScript学习笔记(5--prototype) Java程序猿的JavaScript学习笔记(6--面向对象模拟) Java程

用实例谈谈javascript中的this和prototype

本文通过几个实例谈谈js中一些基础概念的问题.首先回顾一下js这门语言的特点:除了对象什么都没有.函数在js语言中被看作一种特殊的数据类型,特殊在包含代码并且可以执行,但落点在它是一种数据类型,与数字.字符串等一样.    理解了这个,那么js语言中的全局作用域和函数作用域.全局变量和局部变量.可以通过全局对象和非全局对象划分.如果函数或其他数据类型,不依托非全局变量,那么就默认依托全局变量,即作为全局对象的属性或方法,否则被当作局部对象方法或属性.this被用作指向属性和方法所依托的对象.搞清

去除 waring Method &#39;CreateNew&#39; hides virtual method of base type &#39;TCustomForm&#39;

最近整理前人的代码,有好多的hint和waring, 其中整理到Method 'CreateNew' hides virtual method of base type 'TCustomForm', 搞了好一会, 记录下来. 之前这个方法没有加上 reintroduce;overload; Reintroduce: 在子孙类中要声明一个与祖先类中参数不同的方法的时候用Reintroduce,其实你不使用reintroduce也会覆盖屏蔽父类的方法的但是会产生一个警告,     使用了这个关键字,

spring rest项目提示Request method &#39;PUT&#39; not supported Method Not Allowed 405 错误

{ "timestamp": "2019-04-28 17:43:07", "status": 405, "error": "Method Not Allowed", "message": "Request method 'PUT' not supported", "path": "/customer" } 今天项目发布后,发现

[JavaScript] Uncaught TypeError: Method get Set.prototype.size called on incompatible receiver

在对Set进行方法扩展的时候,无法覆盖size属性 情景:定义一个SingletonSet,继承自Set,size只能为1,并且不能add和remove //首先是extend函数 var extend = (function () { //检查是否存在bug for (var p in { toString: null }) { //如果进来了,那说明没有bug return function extend(o) { for (var i = 1; i < arguments.length;

A javascript library providing cross-browser, cross-site messaging/method invocation. http://easyxdm.net

easyXDM - easy Cross-Domain Messaging easyXDM is a Javascript library that enables you as a developer to easily work around the limitation set in place by the Same Origin Policy, in turn making it easy to communicate and expose javascript API's acros