js的this和函数以及原型

43 篇文章 0 订阅
1.this的指向问题

解析器在调用函数的时候每次都会向函数内部传递一个隐含参数。
这个参数就是this,this的指向是一个对象。
这个对象是函数执行的上下文对象。
根据函数调用的方式不同,this的指向也就不同。
1.以函数的形式调用,this的指向永远都是window。
2.以方法的形式调用,this的指向就是调用这个方法的那个对象。(即用点(.)调用的的是方法,点之前的的对象就是this的指向)

2.工厂函数
 function create(name,age,sex){
        let obj = new Object()
        obj.name = name;
        obj.age = age;
        obj.sex = sex;
        obj.seyName = function(){
            alert(this.name)
        }
        return obj;
    }
    let obj1 = create("至尊宝",18,"男")
    let obj2 = create("青霞",17,"女")
    //obj1.seyName()
    //obj2.seyName()
    console.log(obj1)
    console.log(obj2)
3.构造函数

构建一个函数来创建Person对象(Person函数是一个类)。
构建函数是习惯上首字母大写。
构建函数和普通函数没有本质上的区别,构建函数就是普通函数。只是调用方式有区别。
构建函数是通过new 的关键字调用,普通函数是直接调用。

构建函数的执行流程
1.立即创建一个新对象
2.将新建对象设置为函数中的this,在函数中可以使用this来引用新建对象
3.逐行执行函数中的代码
4.将新建对象作为返回值返回

//原型对象添加方法,原型对象相当于是Person对象(Person函数这一个类)的公共方法
//当我们访问一个对象的方法或者或者属性,它会先在对象本身去找,如果找的就会立即使用。如果没有找到就会在他的原型对象里去找,如果找到就立即使用。当我们的对象要添加一个全局的不影响命名空间的时候,我们一般都是在原型对象上添加属性或者方法
//Person.prototype.sayName = function(){
//	 alert("hello大家好,我是:" + this.name)
//}

//将sayName的方法在全局中定义,会污染全局的命名空间,这样定义很不安全,尤其是多人协作开发的时候,这里是举例定义的,建议在原型对象中添加
function fun() {
     alert("	hello大家好,我是:" + this.name)
}
function Person(name, age, sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.sayName = fun;
    }
    let obj1 = new Person("至尊宝", 18, "男")//obj1是Person对象的一个实例
    let obj2 = new Person("青霞", 17, "女")//obj2是Person对象的一个实例
    //obj1.seyName()
    //obj2.seyName()
    console.log(obj1)
    console.log(obj2)
instanceof方法

使用instanceof可以检查一个对象是否为一个类的实例
语法: 对象 instanceof 构造函数
如果是则返回true,反之则是false
例:console.log(obj1 instanceof Person) //true
所有的对象都是Object的后代,instanceof 检查都是true。

in方法
function MyClass(){

}
MyClass.prototype.name= "我在原型对象上的名字"
var mc = MyClass()
mc.age =18//console.log(mc)

使用in方法可检查对象中是否含有一个属性或者方法,有就返回true,反之false,除此之外,对象没有该属性或者方法但是对象的原型上有也会返回true
例:console.log( 'name' in mc) //true

hasOwnproperty()

使用 hasOwnproperty()方法检查对象中是否含有该属性或者方法
只有我们对象自身中含有该属性或者方法的时候才会返回true
例:console.log(mc.hasOwnproperty('age')) //true
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值