构造函数、原型、实例化对象

一、首先说一下什么是构造函数: 构造函数:用来在创建对象时初始化对象。特点:构造函数名一般为大写字母开头;与new运算符一起使用来实例化对象。 举例:

function Person(){}           //Person构造函数
var p=new Person();         //Person构造函数创建对象,也可叫做实例化

二、什么是原型?

原型:构造函数在创建的过程中,系统自动创建出来与构造函数相关联的一个空的对象。可以由构造函数.prototype来访问到。 举例:在实例化对象p的过程中,系统就自动创建出了构造函数的原型,即Person.prototype. 注意:每个对象的__proto__属性指向自身构造函数的prototype; constructor属性是原型对象的属性,指向这个原型对象所对应的构造函数。

三、构造函数、原型对象、实例化对象三者的关系:

四、原型链: 原型链:每一个对象都有自己的原型对象,原型对象本身也是对象,原型对象也有自己的原型对象,这样就形成了一个链式结构,叫做原型链。 举例: 在上面这个例子中的p对象的原型链结构图如下: p对象----->Person.prototype------->Object.prototype--------->null 对这个实例化对象而言,访问对象的属性,是首先在对象本身去找,如果没有,就会去他的原型对象中找,一直找到原型链的终点;如果是修改对象的属性,如果这个实例化对象中有这个属性,就修改,没有这个属性就添加这个属性。

五、继承: 继承:js继承的几种方法:

1. for-in继承:

function Person(){              //父类
     this.name="水煮鱼";
     this.age=18;
}

function Son(){                 //子类
}
var p=new Person();
var s=new Son();
for(var k in p){
    s[k]=p[k];
}
console.log(s.name);           //水煮鱼
console.log(s.age);            //18

2.原型继承:

function Human(){
     this.name="香辣虾";
     this.age=21;
}
function Man(){
}
Man.prototype=new Human();
var m=new Man();
console.log(m.name);           //香辣虾
console.log(m.age);            //21

3.经典继承:(Object.create())

var animal={
      name:"阿咪",
      type:"猫科"
};
var a=Object.create(animal)    //ES5属性
console.log(a.name);           //阿咪
console.log(a.type);           //猫科

Object.create()是让一个对象的原型继承另外一个对象;所以虽然a.name和a.age是可以访问成功的,但实际上a本身并没有这些属性,而是a的原型上有这些属性。看下图:

六、完整原型链:

图中有几个难点: 1.Function构造函数可以用Function.__proto__来访问Function.prototype. 这是因为Function构造函数的构造函数是他本身,作为实例化对象的角色来访问,可行。 2.任何函数都是函数,他都继承Function的所有属性和方法,而Function是内置的构造函数,也是对象,都是继承Object的所有属性和方法。 Github源码地址:https://github.com/spicyboiledfish/JavaScript-testJS

原文地址:https://www.cnblogs.com/happyeveryuday/p/11840985.html

时间: 2024-08-04 10:16:08

构造函数、原型、实例化对象的相关文章

构造函数可以实例化对象

构造函数可以实例化对象* 构造函数中有一个属性叫prototype,是构造函数的原型对象* 构造函数的原型对象(prototype)中有一个constructor构造器,这个构造器指向的就说自己所在的原型对象所在的构造函数* 实例对象的原型对象(__proto__)指向的是该构造函数额原型对象* 构造函数的原型对象(prototype)中的方法是可以被实例对象直接访问的 * 需要共享的数据可以写在原型中* 不需要共享的数据可以写在构造函数中 //构造函数function Student(name

JavaScript_构造函数/原型/实例对象的关系

1.所有的实例对象都有隐式原型属性.2.每一个函数function都有一个prototype显示原型属性.3.对象的隐式原型的值为其对应构造函数的显式原型的值.4.函数的prototype属性: 在定义函数时自动添加的, 默认值是一个空Object对象.5.对象的proto属性: 创建对象时自动添加的, 默认值为构造函数的prototype属性值.6.function Foo{}等于var Foo = new Function()所以有隐式原型属性,即所有函数都有隐式和显示原型属性.7.所有函数

构造函数和实例对象和原型对象之间的关系

构造函数可以实例化对象 构造函数中有一个属性叫prototype,是构造函数的原型对象. 构造函数的原型对象(prototype)中有一个constructor构造器.这个构造器指向的就是自己所在的原型对象所在的构造函数. 实例对象的原型对象(_proto_)指向的是该构造函数的原型对象. 构造函数的原型对象(prototype)中的方法是可以被实例对象直接访问的. 原文地址:https://www.cnblogs.com/Yanss/p/10332053.html

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

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

面向对象之构造函数、实例对象、原型

一.面向对象首先有一个需求,点击按钮改变div的样式.按照常规的思维来写,我们可能是先获取到目标元素,然后给目标元素添加事件,在事件中书写div需要改变的样式属性.如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script type="text

关于构造函数和原型prototype对象的理解

构造函数     1.什么是构造函数 构造函数,主要用于对象创建的初始化,和new运算符一起用于创建对象,一个类可以有多个构造函数,因为函数名相同,所以只能通过参数的个数和类型不同进行区分,即构造函数的重构, 如果没有定义构造函数,那么该类会自动生成一个空参数的构造函数. 在javascript中,对象创建有二种方式:对象字面量和使用new表达式. 对象字面量,每创建一个对象都要重新定义一次语句,不便于创建大量相同类型的对象 new表达式,配合构造函数使用,例如var person1 = new

js高级构造函数,实例对象和原型对象——prototype、__proto__和constructor构造器

一.前言 了解JavaScript面向对象,需要先了解三个名词: 构造函数,实例对象和原型对象. 注意:JavaScript中没有类(class)的概念,取而代之的是构造函数,两者类似却又有很大的差别. 先上代码,最常用的: function Person(name, age) { this.name = name; this.age = age; this.eat= function() { alert('吃西红柿') } } var person1 = new Person('小米', 28

javascript的构造函数和实例对象、prototype和__proto__的区别,原型对象及构造器的理解

一.前言 我们先通过代码来分别打印出实例对象.构造函数,以及修改了原型对象的构造函数,通过对比内部结构来看看他们之间的区别. //定义构造函数 function Person(name, age){ this.name = name; this.age = age; this.play = function(){ console.log('玩好玩的') } } //实例化对象,并初始化赋值 var per = new Person('kitty', '3'); //打印实例对象 console.

2016/3/21 面向对象: ①定义类 ②实例化对象 ③$this关键字 ④构造函数 ⑤析构函数 ⑥封装 ⑦继承

一:定义类   二:实例化对象 1 //定义类 2 class Ren 3 { 4 var $name; 5 var $sex; 6 var $age; 7 8 function Say() 9 { 10 echo "{$this->name}在说话"; 11 } 12 } 13 //实例化对象 14 $Ren = new Ren(); 15 //调用对象的成员: 16 $Ren->name = "张三"; 17 $Ren->Say(); 显示结果