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()

原文地址:https://www.cnblogs.com/Yokemadman/p/10362869.html

时间: 02-11

JS构造函数、原型对象、隐含参数this的相关文章

JS 简单原型对象

<!-- ————————JS简单原型 ———————— --> function Person(){}; Person.prototype={ //constructor:Person,//必须加上 表示原型对象的构造函数 name:"Z3", age:"20", job:"人才", say:function(){ alert("简单原型"); } }; //ECMN5 给原型对象重新设置构造函数definePr

js重写原型对象

首先看两段很相似的代码: 1. function Person(){} Person.prototype = { constructor:Person, name:"Nic", age:"29", sayName:function(){ alert(this.name) } }; var friend1 = new Person(); //实例在这里 friend1.sayName(); 2. function Person(){} var friend2 = ne

面向对象中构造函数,原型对象和实例的关系图

总结 以下代码为例 function Person(){} Person.prototype.c=function(){} var p1=new Person(); var p2=new Person(); 1.构造函数有一个prototype属性,(任何函数都有这个属性)这个属性表示原型对象 Person.prototype 2.构造函数的原型对象有个consturctor属性,指向构造函数本身 Person.prototype.constructor===Person 3.构造函数的原型对象

js(三) 原型对象与原型链

原型对象 每个javascript对象都有一个原型对象 原型链 由于原型对象本身也是对象,根据上边的定义,它也有自己的原型,而它自己的原型对象又可以有自己的原型,这样就组成了一条链,这个就是原型链,JavaScritp引擎在访问对象的属性时,如果在对象本身中没有找到,则会去原型链中查找,如果找到,直接返回值,如果整个链都遍历且没有找到属性,则返回undefined.原型链一般实现为一个链表,这样就可以按照一定的顺序来查找. 一.指定对象字面量的原型 示例1 思想方法:把一些对象共享的方法.属性,

怎么理解js的原型对象

1. 所有对象都有原型对象. 2.  原型对象,就是其它语言中的类中的静态属性和静态方法,总是是静态-static就对了.原理是: 内存中只有一份. 内存中的图解: 先写个构造器: function Person(name, age) {     this.name = name;     this.age = age; } var A = new Person('A', 18); var B = new Person('B', 28); var C = new Person('C', 38);

[js高手之路]使用原型对象(prototype)需要注意的地方

我们先来一个简单的构造函数+原型对象的小程序 1 function CreateObj( uName, uAge ) { 2 this.userName = uName; 3 this.userAge = uAge; 4 } 5 CreateObj.prototype.showUserName = function () { 6 return this.userName; 7 } 8 CreateObj.prototype.showUserAge = function () { 9 return

原型对象

原型对象的使用方法 利用对象的动态特性给原型对象添加成员 直接替换原型对象 注意:在替换原型之前创建的对象的原型和在替换原型对象之后创建的对象的原型不是同一个 使用原型的注意事项: 使用对象访问属性的时候,如果本身内找不到就会去原型中查找.但是使用点语法进行赋值的时候,并不会去原型中进行查找.使用点语法进行赋值的时候,对象中不存在该属性,就会给该对象新增属性,而不会去修改原型中的属性. 如果在原型对象中的属性是引用类型的属性,那么所有的独享共享该属性,并且任何一个对象修改了该引用类型属性的成员,

MDN——javascript——入门——第三章对象——对象.构造函数.原型链.继承——知识点总结

对象Object 由属性property(变量).方法method(函数)组成 var objectName = { member1Name : member1Value, member2Name : member2Value, member3Name : member3Value } member(成员)的值是任意的, 一个如上所示的对象被称之为对象的字面量(literal)——手动的写出对象的内容来创建一个对象.不同于从类实例化一个对象,我们会在后面学习这种方式. 访问对象成员 1.点表示法

深入javascript——构造函数和原型对象

深入javascript——构造函数和原型对象 常用的几种对象创建模式 使用new关键字创建 最基础的对象创建方式,无非就是和其他多数语言一样说的一样:没对象,你new一个呀! var gf = new Object(); gf.name = "tangwei"; gf.bar = "c++"; gf.sayWhat = function() { console.log(this.name + "said:love you forever");

js的隐含参数(arguments,callee,caller)使用方法

在提到上述的概念之前,首先想说说javascript中函数的隐含参数: arguments arguments 该对象代表正在执行的函数和调用它的函数的参数.[function.]arguments[n]参数function:选项.当前正在执行的 Function 对象的名字. n :选项.要传递给 Function 对象的从0开始的参数值索引.说明Arguments是进行函数调用时,除了指定的参数外,还另外创建的一个隐藏对象.Arguments是一个类似数组但不是数组的对象,说它类似数组是因为