JS构造函数、原型对象、隐含参数this
This
解析器再调用函数每次都会向函数内部传递一个隐含的参数this,this指向的是一个对象(函数执行的上下文对象)
1、以函数形式调用时,this永远是window。
2、以方法形式调用时,this就是调用方法的那个对象
3、当以构造函数的形式调用时,this就是新创建的那个对象
使用工厂的方法创建对象
通过该方法可以大批量的创建对象,这样创建的对象使用的构造函数都是Object,无法区分多种不同类型的对象。
function create(name,age,geder){
var obj = new Object();
obj.name = name;
obj.age = age;
obj.gender =gender;
obj.sayName = function(){
alert(this.name);
};
return obj;
}
var obj1 = create(“xx”,xx,“x”);
var obj2 = create(“xx”,xx,“x”);
var obj3 = create(“xx”,xx,“x”);
console.log(obj1);
console.log(obj2);
console.log(obj3);
构造函数
一个普通的函数,创建方式和普通函数没有区别,不同的是构造函数习惯首字母大写
构造函数和普通函数的区别就是调用方式不同,普通函数直接调用,构造函数需要用new关键字
执行流程:
1、 立刻创建一个新的对象
2、将新建对象设置为this,在构造函数中可以使用this来引用新建的对象
3、逐行执行函数中代码
4、将新建的对象作为返回值返回
function person(name,age,geder){
this.name = name;
this.age = age;
this.gender =gender;
this.sayName = function(){
alert(this.name);
};
}
var per = new person(“xx”,xx,“x”);
var per2 = new person(“xx”,xx,“x”);
var per2 = new person(“xx”,xx,“x”);
console.log(per);
console.log(per2);
console.log(per3);
使用instanceof可以检查一个对象是否是一个类的实例
语法:对象 instanceof 构造函数
如果是则返回true,否则返回false
为节省空间,将sayname方法在全局作用域中定以,
但会污染全局作用域的命名空间,不安全
原型(prototype)
每创建一个函数,解析器都会向函数中添加一个属性,这个属性对应一个对象就是原型对象
作为普通函数调用prototype没有任何作用
以构造函数调用时,创建的对象都会有一个隐含的属性,
指向该构造函数的原型对象,可以通过_ _proto_ _来访问该属性
原型对象相当于一个公共的区域,所有对象都可以访问到原型的属性可以将对象中共有的内容,统一设置到原型对象中
function MyClass(){
}
//向MyClass的原型中添加属性a
MyClass.prototype.a = 123;
//向MyClass的原型中添加一个方法
MyClass.prototype.sayHello = function(){
alert("Hello");
};
检查对象自身中是否含有某个属性用对象的hasOwnProperty()
JS构造函数、原型对象、隐含参数this的更多相关文章
- JS构造函数、对象工厂、原型模式
1.对象创建的3中方法 1.1.对象字面量 var obj = { name: "mingzi", work: function () { console.log("wo ...
- js构造函数+原型
注:普通对象与函数对象 var o1 = {}; var o2 =new Object(); var o3 = new f1(); function f1(){}; var f2 = function ...
- js重写原型对象
首先看两段很相似的代码: 1. function Person(){} Person.prototype = { constructor:Person, name:"Nic", a ...
- JS之原型对象
1.__proto__ 每个对象都有一个__proto__属性,指向该对象的原型对象 <script> var person = function(name,city){ this.nam ...
- 分析 js构造函数:对象方法 、类方法 、原型方法
构造函数方法有对象方法.类方法.原型方法,这些方法在什么时候可以调用,什么时候不能调用,为什么? function Func(name){ this.name=name; this.ff=functi ...
- 笔记: js构造函数与原型
目录 构造函数与原型介绍 涉及三种引用的操作 有关原型及原型链的一些相关方法总结 @ 构造函数与原型介绍 1.函数与函数的原型对象(prototype object): 在JavaScript中,创建 ...
- JS核心系列:原型对象
在JS中,每当创建一个函数对象f1 时,该对象中都会内置一些属性,其中包括prototype和proto, prototype即原型对象. 每一个构造函数都有一个与之相关联的对象,该对象称之为原型对象 ...
- [转]JavaScript构造函数及原型对象
JavaScript中没有类的概念,所以其在对象创建方面与面向对象语言有所不同. JS中对象可以定义为”无序属性的集合”.其属性可以包含基本值,对象以及函数.对象实质上就是一组没有特定顺序的值,对象中 ...
- 还在问什么是JavaScript构造函数、实例、原型对象以及原型链?看完这篇你就懂
1概述 ES6, 全称 ECMAScript 6.0 ,2015.06 发版.在ES6之前,对象不是基于类创建的,而是用一种称为构造函数的特殊函数来定义对象和它们的特征. 2构造函数 构造函数是一种特 ...
- [js高手之路]使用原型对象(prototype)需要注意的地方
我们先来一个简单的构造函数+原型对象的小程序 function CreateObj( uName, uAge ) { this.userName = uName; this.userAge = uAg ...
随机推荐
- tensorflow 基本内容
tensorflow的结构 1.使用图(graphs)来表示计算任务 2.在被称之为会话(Session)的上下文(context)中执行图 3.使用tensor表示数据 4.通过变量(Variabl ...
- 搭建docker私有仓库
保存镜像的地方成为仓库(registry).目前有2种仓库:公共仓库和私有仓库. 最方便的是使用公共仓库上传和下载镜像,下载不需要注册,上传需要到公共仓库注册.公共仓库网站:https://hub.d ...
- springboot读取application.properties中自定义配置
假设在application-xxx.properties中配置 user.name=yuhk 一.在Controller中读取 @Value("{$user.name}") pr ...
- 20190423 PowerDesigner 数据库模型快速建立
后面我在做一个视频的讲解记录吧! 那种讲解记录,只是为了演示按钮功能在什么地方,这个功能的作用是什么 这个软件相对比较简单的使用步骤,主要有三步 第一. 选择好你针对的数据库版本和类型创建数据库名称基 ...
- Python3学习之路~7.4 动态导入模块
动态导入模块就是只知道str类型的模块名字符串,通过这个字符串导入模块. 准备: 首先创建一个模块目录lib,然后在目录内创建一个模块 aa.py: # aa.pyclass C: def __ini ...
- zabbix基础服务搭建
监控系统的介绍 性能优化和监控点 1.cpu 调度器 有效的分配cpu的时间片 上下文切换 运行队列 ...
- 2019-04-27 Python之有关文件的学习
一.文件 1.简介 二.文件的相关操作 1.打开文件 例如: f = open("F:\\text.txt", 'r') 只读模式,不可写入 2.读取文件 例如: f.readl ...
- #WEB安全基础 : HTTP协议 | 0x15 HTTPS:给你点颜色看看
"你好,我是HTTPS,我只是披了个外壳,我还是原来的HTTP." 这是HTTPS叫我转达给你的话. HTTPS本质上就是HTTP,只不过加了点调料.它比HTTP更安全,使用了加密 ...
- JDK8 HashMap--getTreeNode()获取红黑树指定key的节点
/*获取红黑树的指定节点*/ final TreeNode<K,V> getTreeNode(int h, Object k) { return ((parent != null) ? r ...
- oracle - sqldeveloper 手动执行包 package的方法
比如建立一个包头如下: create or replace PACKAGE LSG_OBC_ORDERS_HK01_EC_PKG AS PROCEDURE LSG_OBC_HK01_main( err ...