Javascirpt--原型模型---04

什么是原型属性,原型对象
Javascript中每个函数都有一个prototype(原型)属性,这个属性指向一个对象(原型对象),这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法。
结论:使用原型对象可以让所有实例共享它的属性和方法

function Person(){
}

Person.prototype.name = "Nicholas";
Person.prototype.age = 29;
Person.prototype.job = "Software Engineer";
Person.prototype.sayName = function(){
	alert(this.name);
};

var person1 = new Person();
person1.sayName(); //"Nicholas"
var person2 = new Person();
person2.sayName(); //"Nicholas"

alert(person1.sayName == person2.sayName); //true => person1和person2调用的是同一个方法的实例

原型对象的理解:
在这里插入图片描述

只要创建一个新函数,js会根据特定规则为这个函数生成一个prototype属性(原型属性),这个属性值是一个指针,指向这个函数的原型对象。默认情况下,原型对象会自动获取一个constructor属性,这个属性值是一个指针,指向prototype所在函数。
当调用构造函数创建一个新实例后,该实例内部将包含一个内部属性([[prototype]]),指向构造函数的原型对象。这个内部属性[[protype]] 没有标准的方式来访问,不同浏览器的实现方式可能不一样。Chrome,Firefox通过__proto__这个属性可以访问,一般称实例的__proto__为隐式原型函数的prototype为显式原型

以上图Person为例,Person构造函数默认会有一个prototype属性,这个属性指向一个对象,称为构造函数的原型对象,该原型对象默认情况下会有一个constructor属性,这个属性值是一个指针,指向Person()这个函数。
person1通过new Person()创建了一个实例,这个 实例默认会有一个内部属性[[Prototype]],这个内部属性值是一个指针,指向函数的原型对象,这个内部属性在Chrome中可通过person1.__protype__访问到。
一旦创建实例后,实例就可以访问原型对象中的属性和方法。

var person1 = new Person();
person1.sayName(); //"Nicholas"
var person2 = new Person();
person2.sayName(); //"Nicholas"

实例和函数不会直接关联,实例与函数的原型对象直接连接

Example:

        function test() {
            this.Name = 'henry';
            this.Age = 25;
        }
        test.prototype.Tall = 180;
        test.prototype.getprovince = function () {
            return '宇宙苏';
        }

        var fn = new test();
        console.log(fn.Name);//henry
        console.log(fn.Age);//25
        console.log(fn.Tall);//180
        console.log(fn.getprovince());//宇宙苏

        //__proto__:隐式原型   prototype:显式原型
        console.log(fn.__proto__ === test.prototype);//true
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript中的原型链(prototype chain)和继承是面向对象编程的重要概念,它们是JavaScript特有的实现继承的方式,与传统的类-实例模型不同。 1. 原型链:每个JavaScript对象都有一个内置的[[Prototype]]属性,指向另一个对象。当你试图访问一个对象的属性或方法时,如果该对象自身没有这个属性,JavaScript会沿着原型链向上查找,直到找到或者到达原型链的顶端(`Object.prototype`)。这就是原型链的工作原理,它使得子类可以访问父类的方法和属性。 2. 继承:在JavaScript中,继承是通过原型链实现的。通常,我们会创建一个构造函数(也称为原型的构造函数),然后用它来创建一个新的对象,这个新对象会自动获得原型(构造函数的实例)的所有属性和方法。子类(构造函数的新实例)就通过这种方式“继承”了父类的特性。 举个例子: ```javascript function Animal(name) { this.name = name; } Animal.prototype.speak = function() { console.log(this.name + ' makes a sound.'); } function Dog(name, breed) { Animal.call(this, name); // 使用构造函数的call方法来设置原型链 this.breed = breed; } Dog.prototype = Object.create(Animal.prototype); // 创建子类的原型并指向父类 Dog.prototype.constructor = Dog; // 修正构造函数指针 // 创建子类实例 let myDog = new Dog('Rex', 'Labrador'); myDog.speak(); // 输出 "Rex makes a sound." ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值