1.原型方法和属性方法的检测
isPortotypeOf() 检测当前对象是否是基于对应构造函数创建出来得
instanceof 用于判断变量得类型
hasOwnProperty() 判断当前得属性和方法是否源于 对象构造函数内部
in 判断当前对象是否具有对应属性和方法 通常用于 代码得健壮性
例:
function User(name, age, password, email) {
this.name = name
this.age = age
this.password = password
this.email = email
}
User.prototype.show = function () {
console.log(this.name + "、" + this.age + "岁")
}
var user1 = new User("韩", 20, "hdy", "33@163.com")
user1 instanceof User
var k = User.prototype.isPrototypeOf(user1)
console.log(k) //true
var r = user1.hasOwnProperty("show")
console.log(r) //flase
var t = "show" in user1
console.log(t) //true
2. 面向对象特征:
1.抽象性: 从对象分析业务
2.封装性: 将属性和方法封装到对象里,方便维护、统一进行管理 便于二次开发 提高安全性
3.继承性: 将对象得属性和方法进行传递 原型链,改变this得指向性问题
4.多态性:一个类可以产生多种类型得对象 js无法做到!
封装性:属性分为两大类
共有属性:任何人在任何位置都可以任意得访问以及修改
私有属性:必须达到某些条件才能更改或者访问
安全性较高的属性定义为私有属性,不能随意访问更改
用于js本身没有私有概念 ,只能用局部变量来模拟
通过get 和set方法来实现 属性得获取和设置
定义私有属性,如:
function User1(name, age, password, email) {
this.name = name
this.age = age
this.password = password
var email = email
this.getEmail = function (user) {
if (user.name == "韩") {
console.log(email)
} else {
console.log("权限不够")
}
}
this.setEmail = function (email) {
//加判定
var reg = /^[A-Za-z\d]+([-_ .][A-Za-z\d]+)*@([A-Za-z\d]+[-.])+[A-Za-z\d]{2,4}$/
if (reg.test(email)) {
alert("设置格式符合要求")
} else {
alert("设置格式不符合要求")
}
}
}
var user2 = new User1("韩", 20, "hdy", "33@163.com")
var user3 = new User1("东", 20, "hdy", "33163.com")
user2.getEmail(user3)
user2.getEmail(user2)
user2.setEmail("33@163.com")
user3.setEmail("33163.com")
3. 改变this得指向性call和apply
function User2(name, age, password, email) {
this.name = name
this.age = age
this.password = password
this.email = email
}
User2.prototype.show = function () {
console.log(this.name)
}
User2.prototype.abc = function (a, b, c) {
console.log(this.name +"+"+ a + b + c)
}
var user4 = new User2("韩1", 20, "hdy", "13@163.com")
var user5 = new User2("韩2", 21, "hdy", "23@163.com")
call方法 改变this得指向性
.call() 第一个参数 改变得对象 后续参数传入方法对应得参数
user5.show.call(user4)
user4.abc.call(user5,1,2,3)
apply() 第一参数 改变得对象 第二个参数[]放入参数列表
user4.abc.apply(user5,[1,2,3])