JS构造函数原型对象隐含参数this

Posted Yokemadman

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的主要内容,如果未能解决你的问题,请参考以下文章

__x__(63)0925第十天__ JavaScript 函数 上下文对象 原型对象

JS面向对象——构造函数模式和原型模式

JS中的原型

JS 构造函数——判断父对象是否在子对象的原型链上

关于JavaScript中this指向问题

js原型和原型链理解 constructor 构造函数