js 面向对象之构造器与工厂函数
一、字面量模式声明一个对象
let m = {name: "lisi", age:15}
m.constructor
// ƒ Object() { [native code] }
Object.constructor
// ƒ Function() { [native code] }
①每个对象都有构造函数。
②字面量形式的实例的构造函数通常是 Object。
③Object、Function与普通函数 的构造函数都是 Function。
二、构造函数模式
function Circle(radius) {
this.radius = radius
this.draw = function (){
console.log("draw")
}
}
// new 操作符做了4件事
let c1 = new Circle(2)
let Circle2 = new Function("radius", `
this.radius = radius
this.draw = function (){
console.log("draw")
}
`)
说明:
When the code new Foo(...) is executed, the following things happen:
- A new object is created, inheriting from
Foo.prototype. - The constructor function
Foois called with the specified arguments, and withthisbound to the newly created object.new Foois equivalent tonew Foo(), i.e. if no argument list is specified,Foois called without arguments. - The object (not null, false, 3.1415 or other primitive types) returned by the constructor function becomes the result of the whole
newexpression. If the constructor function doesn't explicitly return an object, the object created in step 1 is used instead. (Normally constructors don't return a value, but they can choose to do so if they want to override the normal object creation process.)
总结:
构造函数的目的是创建新实例。如果构造函数的返回值是一个对象,那么这个新实例就是该返回值。
如果构造函数的返回值不是一个对象,那么 new 操作符会创建一个 Object,绑定构造函数的this到这个 Object,最后返回 this。如果不使用 new 操作符,则不会创建这个 Object。
开闭原则
function Circle(radius) {
this.radius = radius
// 定义闭包共享变量
let defaultLocation = {
x: 0,
y: 0
}
this.draw = function () {
console.log("draw")
}
//提供可读权限(但不可写)
Object.defineProperty(this, 'defaultLocation', {
get: function () {
this.defaultLocation
}
})
}
参考
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new
https://blog.csdn.net/luanpeng825485697/article/details/78009093
js 面向对象之构造器与工厂函数的更多相关文章
- js面向对象、创建对象的工厂模式、构造函数模式、原型链模式
JS面向对象编程(转载) 什么是面向对象编程(OOP)?用对象的思想去写代码,就是面向对象编程. 面向对象编程的特点 抽象:抓住核心问题 封装:只能通过对象来访问方法 继承:从已有对象上继承出新的对象 ...
- js面向对象(对象/类/工厂模式/构造函数/公有和原型)
https://www.cnblogs.com/sandraryan/ 什么是对象 js中一切都是对象(有行为和特征).js允许自定义对象,也提供了内建对象(string date math等) 对象 ...
- js 面向对象中,定义一个函数的过程
定义一个函数做的两件事:1: 实例化一个Function对象:2: 实例化一个Object对象,并给该函数扩展prototype属性指向这个构造函数 大致过程如图所示: 每一种引用类型(函数,对象,数 ...
- JavaScript中的构造函数和工厂函数说明
在cnblog上看到一篇文章,讲解JS中的构造函数和工厂函数,觉得讲的真好 JavaScript中的工厂函数和构造函数都能用来创建一个对象,我们可以来看看下面的例子 构造函数 function cre ...
- js面向对象自定义MyString()的构造器函数,实现内建String()属性和方法:
js面向对象自定义MyString()的构造器函数,实现内建String()属性和方法: var s = new MyString('hello'); s.length; s[0]; // " ...
- JS面向对象之工厂模式
js面向对象 什么是对象 "无序属性的集合,其属性可以包括基本值.对象或者函数",对象是一组没有特定顺序的的值.对象的没个属性或方法都有一个俄名字,每个名字都映射到一个值. 简单来 ...
- JavaScript---正则使用,日期Date的使用,Math的使用,JS面向对象(工厂模式,元模型创建对象,Object添加方法)
JavaScript---正则使用,日期Date的使用,Math的使用,JS面向对象(工厂模式,元模型创建对象,Object添加方法) 一丶正则的用法 创建正则对象: 方式一: var reg=new ...
- JavaScript基础精华02(函数声明,arguments对象,匿名函数,JS面向对象基础)
函数声明 JavaScript中声明函数的方式:(无需声明返回值类型) function add(i1, i2) { return i1 + i2;//如果不写return返回 ...
- js原生设计模式——3简单工厂模式\js面向对象编程实例
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
随机推荐
- 最新 农信互联java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.农信互联等10家互联网公司的校招Offer,因为某些自身原因最终选择了农信互联.6.7月主要是做系统复习.项目复盘.Leet ...
- poj1228(稳定凸包+特判最后一条边)
题目链接:https://vjudge.net/problem/POJ-1228 题意:我是真的没看懂题意QAQ...搜了才知道.题目给了n个点,问这n个点确定的凸包是否能通过添加点来变成一个新的凸包 ...
- lombok的@Accessors注解
@AllArgsConstructor @Data @NoArgsConstructor @Accessors(chain = true) @EqualsAndHashCode public clas ...
- Python30之文件2(文件系统)
一.在python中对于文件系统的访问一般使用的是os模块.python是跨平台的,因此在使用os模块时,不需要关心是在什么系统下使用的 import os >>> os.listd ...
- 题解-CSA Beta Round#1 Number Elimination
Problem CSA-Beta Round#3 题意概要:给定 \(n\) 个数组成的序列,定义一次操作: 在当前序列中选择两个数,将其中较小的数从序列中删除(若两个数相同,则删除在序列中更靠前的) ...
- 用chattr命令防止系统中某个关键文件被修改
用chattr命令防止系统中某个关键文件被修改:# chattr +i /etc/resolv.conf
- linux安装imagemagick,centos安装imagemagick方法
1.安装文件格式支持库 yum install tcl-devel libpng-devel libjpeg-devel ghostscript-devel bzip2-devel freetype- ...
- 将网站升级为https并自动续期Https证书。
Let's Encrypt Let's Encrypt 是一个由Internet Security Research Group (互联网安全研究组)提供的免费,自动化和开放的证书颁发机构. 它秉承着 ...
- CentOS+Linux部署.NET Core应用程序
工具: WinSCP+Xshell+VMware 1.安装CentOS 省略安装过程... 2. 安装.Net Core Sdk ①更新可用的安装包:sudo yum update ②安装.NET需要 ...
- IClientMessageInspector IDispatchMessageInspector
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...