IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> js高级总结2 -> 正文阅读

[JavaScript知识库]js高级总结2

this指向问题
原则是 谁调用 指向谁
1、普通函数中的this 指向window
2、对象方法中的this 指向对象
3、构造函数创建对象的方法中的this 指向new出来的对象
4、定时器中的this ?指向window
5、call ?apply 调用的this 指向新的值

原型和原型链
1、同一个new创建出来的对象的原型(_proto_)相同 指向共同的对象 -----原型对象(prototype)
2、new创建出来的对象都有_proto_属性 指向这个函数的原型对象
3、所有原型对象的_proto_属性默认指向 Object?
4、Object的_proto_属性指向null
5、各个函数原型对象中又有一个 constructor 指向函数对象
6、所有函数对象的_proto_指向Function原型对象
7、Function原型对象的_proto_指向Object原型对象


对象常用方法

1、instanceof 用于检测变量的指定数据类型

?function Student(name,age){
? ? ? ? ?this.name=name
? ? ? ? ?this.age=age
? ? ?}
? ? ?Student.prototype.show=function(){
? ? ? ? ?conosole.log(this.name)
? ? ?}
? ? ?var s1=new Student("王一",21)


? ? instanceof 检测s1是否为 Student类型
? ?

 ?var result=s1 instanceof Student
? ? ?console.log(result)

2、isPrototypeOf() 判断对象是否是基于对应构造函数创建 ??
?

? ?var result=Student.prototype.isPrototypeOf(s1)
? ? ? console.log(result)


3、判断属性的方法?
? ? ? .hasOwnProperty(属性名(key)) 判断当前属性 是否存在于 构造函数
4、in 判断对象是否具有对应属性 (key in 对象 )

var r="name"in s1


面试题:编写一个方法,传入一个对象 以及 key值,判断一下当前这个属性是否是存在于原型中的,如果是返回T,如果不是返回F
? ? ? ? 属性 : 构造函数 ?原型中的
? ? ? ? 判断当前属性是否存在于对象的原型中?
? ?

? ? function hasPrototype(obj,key){
? ? ? ? ? ? return key in obj && obj.hasOwnProperty(key)==false
? ? ? ? }

?面向对象编程的特点
? ? 1.抽象性 :通过对象来分析实际问题?
? ? 2.封装性: ?属性和方法 都封装到对象 ?节约开发成本 ?维护成本 ?安全?
? ? 3.继承性 :java python 举例子讲解?
? ? 4.多态性: 一个类 可以创建多种对象 ,js中基本用不着 ? ? ? ??

公开属性 :任何的属性都可以直接访问,以及更改 ? 不安全
私有属性:只能通过方法修改不能直接修改,通过制定的方法 访问以及修改

私有属性

function User(name,upass,phone){
? ? ? ? ? ? var upass=upass
? ? ? ? ? ? this.name=name
? ? ? ? ? ? this.phonenumber=phone
? ? ? ? ? ? //定义两个方法 一个用来访问私有属性
? ? ? ? ? ? this.getUpass=function(){
? ? ? ? ? ? ? ? return upass
? ? ? ? ? ? }
? ? ? ? ? ? //一个用来设置私有属性?
? ? ? ? ? ? this.setUpass=function(val){
? ? ? ? ? ? ? ? var reg=/\d{11}$/
? ? ? ? ? ? ? ? if(reg.test(val)){
? ? ? ? ? ? ? ? ? ? upass=val
? ? ? ? ? ? ? ? } ? ?
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? //写到原型上也可以?
? ? ? ? var u1=new User('王一',12346,1523556788)
? ? ? ? u1.setUpass(45645645645)
? ? ? ? var result=u1.getUpass()
? ? ? ? console.log(result)

get访问私有属性
set设置私有属性
通过函数内部的局部变量对于内部函数是全局变量 ?只能通过方法访问

属性继承
将共有的方法和属性写到父类中 子类可以继承父亲的方法或者属性


1、原型链继承 无法对属性初始化 所有属性都是固定的
?Dog.prototype=new Animal("小黑",12,"红色")

2、冒充继承 通过call 或者apply来改变this的指向?
可以继承构造函数中的内容 无法继承原型?

.call(对象 ,参数1 ,参数2.。。。。。)改变this的指向
.apply(对象,[参数1,参数2,。。。。])改变this的指向 还可以改变传参的方式 统一的用数组
二者使用方法基本相同 apply改变了传参方式 用数组传递

?Animal.call(this,name,age,color)?

Math.max() //一组数中 最大的数?

var max=Math.max(20,50,70,90)
//找出数组中最大的数的方法?
var arr=[20,230,123,124,12]
var max=Math.max(arr)
?var max=Math.max.apply(null,arr)

3、混合继承

function Tiger(name,age,color){
? ? ?Animal.call(this,name,age,color) //冒充继承
? ? ? ? }
? ? Tiger.prototype=new Animal()//原型链继承

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-06 15:09:45  更:2021-12-06 15:11:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:32:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码