js 构造函数 & 静态方法 & 原型 & 实例方法
js 构造函数 & 静态方法 & 原型 & 实例方法

ES5
"use strict";
/**
 *
 * @author xgqfrms
 * @license MIT
 * @copyright xgqfrms
 * @created 2020-10-10
 * @modified
 *
 * @description  构造函数 静态方法 & 构造函数的原型 实例方法
 * @description 构造函数上添加只有构造函数可以访问的静态方法
 * @description 在构造函数的原型上添加只有实例才可以访问的实例方法 require
 * @difficulty Easy Medium Hard
 * @complexity O(n)
 * @augments
 * @example
 * @link https://www.cnblogs.com/xgqfrms/p/13790093.html
 * @solutions
 *
 * @best_solutions
 *
 */
const log = console.log;
// ES5 constructor
// const func = function (id, name) {
function func (id, name) {
  // log(`func.name =`, func.name);
  // func.name = func
  this.name = name;
  this.id = id;
  this.getId = () => this.id;
}
// ƒ (id) {
// this.id = id;
// this.getId = () => this.id;
// }
//  在构造函数上添加只有构造函数可以访问的静态方法 func._getName
func._getName = function(f) {;
  log(`${f.name} =`, f);
  // f3 = func {name: "f3", id: "3", getId: ƒ}
  return f.name;
}
// ƒ (f) {;
//   log(`${f.name} =`, f);
//   // f3 = func {name: "f3", id: "3", getId: ƒ}
//   return f.name;
// }
//  在构造函数的原型上添加只有实例才可以访问的实例方法 require
func.prototype.require = function () {
  // 调用构造函数的静态方法 func._getName
  const name = func._getName(this);
  log(`${name}'s name =`, name);
  // f3's name = f3
  return this.getId();
}
// ƒ () {
//   // 调用构造函数的静态方法 func._getName
//   const name = func._getName(this);
//   log(`${name}'s name =`, name);
//   // f3's name = f3
//   return this.getId();
// }
const f3 = new func(`3`, `f3`);
// func {id: "3", getId: ƒ}
f3.id;
// "3"
f3.getId();
// "3"
f3.require();
// f3 = func {name: "f3", id: "3", getId: ƒ}
// f3's name = f3
// "3"
func._getName(f3);
// f3 = func {name: "f3", id: "3", getId: ƒ}
// "f3"
// func.require();
// Uncaught TypeError: func.require is not a function
ES6
"use strict";
/**
 *
 * @author xgqfrms
 * @license MIT
 * @copyright xgqfrms
 * @created 2020-10-10
 * @modified
 *
 * @description  构造函数 静态方法 & 构造函数的原型 实例方法
 * @description 构造函数上添加只有构造函数可以访问的静态方法
 * @description 在构造函数的原型上添加只有实例才可以访问的实例方法 require
 * @difficulty Easy Medium Hard
 * @complexity O(n)
 * @augments
 * @example
 * @link https://www.cnblogs.com/xgqfrms/p/13790093.html
 * @solutions
 *
 * @best_solutions
 *
 */
const log = console.log;
// ES6 class constructor
class func {
  constructor(id, name) {
    // log(`func.name =`, func.name);
    // func.name = func
    this.name = name;
    this.id = id;
    this.getId = () => this.id;
  }
}
//  在构造函数上添加只有构造函数可以访问的静态方法 func._getName
func._getName = function(f) {;
  log(`${f.name} =`, f);
  // f3 = func {name: "f3", id: "3", getId: ƒ}
  return f.name;
}
//  在构造函数的原型上添加只有实例才可以访问的实例方法 require
func.prototype.require = function () {
  // 调用构造函数的静态方法 func._getName
  const name = func._getName(this);
  log(`${name}'s name =`, name);
  // f3's name = f3
  return this.getId();
}
const f3 = new func(`3`, `f3`);
// func {id: "3", getId: ƒ}
f3.id;
// "3"
f3.getId();
// "3"
f3.require();
// f3 = func {name: "f3", id: "3", getId: ƒ}
// f3's name = f3
// "3"
func._getName(f3);
// f3 = func {name: "f3", id: "3", getId: ƒ}
// "f3"
// func.require();
// Uncaught TypeError: func.require is not a function
refs
http://www.ruanyifeng.com/blog/2015/05/require.html
xgqfrms 2012-2020
www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!
js 构造函数 & 静态方法 & 原型 & 实例方法的更多相关文章
- 深入研究js构造函数和原型
		很快就要从新浪离职了,最近心情比较轻松,抽点空整理一下构造函数和原型的机理. 我们都知道,在经典设计模式中我们最常用的就是工厂模式.构造函数模式.原型模式这几种,听起来‘模式’好像很高大上的样子,实际 ... 
- 笔记: js构造函数与原型
		目录 构造函数与原型介绍 涉及三种引用的操作 有关原型及原型链的一些相关方法总结 @ 构造函数与原型介绍 1.函数与函数的原型对象(prototype object): 在JavaScript中,创建 ... 
- 完整原型链详细图解之JS构造函数、原型 原型链、实例化对象
		一.首先说一下什么是构造函数: 构造函数:用来在创建对象时初始化对象.特点:构造函数名一般为大写字母开头:与new运算符一起使用来实例化对象. 举例: function Person(){} //Pe ... 
- JS构造函数、原型对象、隐含参数this
		This 解析器再调用函数每次都会向函数内部传递一个隐含的参数this,this指向的是一个对象(函数执行的上下文对象) 1.以函数形式调用时,this永远是window. 2.以方法形式调用时,th ... 
- js之静态方法与实例方法
		静态方法是指不需要声明类的实例就可以使用的方法. 实例方法是指必须要先使用"new"关键字声明一个类的实例, 然后才可以通过此实例访问的方法. function staticCla ... 
- 一句话总结JS构造函数、原型和实例的关系
		"每个构造函数都有一个原型对象, 原型对象都包含一个指向构造函数的指针, 实例都包含一个指向原型对象的内部指针." --此段话摘自<JavaScript高级程序设计>. ... 
- JS基础——构造函数VS原型
		JS是一种基于对象的语言.在使用过程中不免遇到复制对象的问题.但通常我们採用的直接赋值'obj1=obj2'这样的做法会出现数据覆盖问题. 也就是对象引用过程中引用地址一致.导致对象数据被改动的问题. ... 
- Js类的静态方法与实例方法区分以及jQuery如何拓展两种方法
		上学时C#老师讲到对象有两类方法,静态方法(Static)和实例方法(非Static),当时不理解静态是为何意,只是强记. 后来从事前端工作,一直在对类(即对象,Js中严格来说没有类的定义,虽众所周知 ... 
- JS构造函数的用法和JS原型
		$(function(){ var rec = new Rectangle(5, 10); //alert(rec.width + "*" + rec.height + " ... 
随机推荐
- .NET5 它来了!微软大一统时代来临!
			今天双11,Microsoft released.NET 5(在他们的开发博客上同时发布).新版本的重点是改进.NET Core 3.1: 更小的单文件应用程序.对 Windows ARM64的支持以 ... 
- hashlib,configparser,logging
			# hash: 算法, 结果是什么? 是内存地址, # print(hash('123')) # dic = {'name':'alex'} # print(hash('name')) # print ... 
- 洛谷P3850 书架
			题目描述 Knuth先生家里有个精致的书架,书架上有N本书,如今他想学到更多的知识,于是又买来了M本不同的新书.现在他要把新买的书依次插入到书架中,他已经把每本书要插入的位置标记好了,并且相应的将它们 ... 
- Mysql 不能使用逗号的情况
			不存在逗号的情况: 联合查询: 1.UNION SELECT * FROM ((SELECT 1)a JOIN (SELECT 2)b JOIN (SELECT 3)c JOIN (SELECT 4) ... 
- SpringMVC听课笔记(十五:SpringMVC 运行流程)
			1. 图 一般的会按照红线标注的方向去行进,但是请求静态资源,或者出现异常等,会出现其他路径 2. 
- Java Web工作原理
			解析HTTP协议 HTTP:超文本传输协议(HyperText Transfer Protocol) HTTP是一种无状态的协议,意思是指在Web浏览器和Web服务器之间不需要建立持久的连接. HTT ... 
- jQuery——样式与动画
			通过jQuery,不仅能够轻松地为页面操作添加简单的视觉效果,甚至能创建更精致的动画. ###修改内联CSS jQuery提供了.css()方法. 这个方法集getter(获取方法)和setter(设 ... 
- 天融信Top-app LB负载均衡SQL注入0day
			POST /acc/clsf/report/datasource.php HTTP/1.1 Host: Connection: close Accept: text/javascript, text/ ... 
- hadoop的Namenode HA原理详解
			为什么要Namenode HA? 1. NameNode High Availability即高可用. 2. NameNode 很重要,挂掉会导致存储停止服务,无法进行数据的读写,基于此NameNod ... 
- gcc选项 笔记
			gcc –E hello.c –o hello.i 使用gcc的选项"-E" 让gcc在预处理结束后停止编译过程. gcc –S hello.i –o hello.s &q ... 
