简单理解js的prototype属性

prototype属性是您有能力向对象添加属性和方法;

先介绍一个下面要用到的函数,JSON.stringify(value)。

这个函数的作用是:把传入的参数value(对象或者数组)变成字符串,它有三个参数,第一个参数是必须的,其余的两个参数可填可不填。

var ob = { };//超级简单的空对象
alert(JSON.stringify(ob.prototype));

它alert的东西是undefined,也就是说object这个属性prototype不是个东西

我可以很明白的告诉你,prototype绝对不是给对象用的,对象根本没办法引用prototype这个属性,它真正的属主,其实是函数

记住,能够引用prototype的东西绝对是函数

 prototype是函数的一个属性,是函数的原型对象。prototype只能够被   函数     调用。

//首先定义一个有名函数func
function func(){
    
}
alert(func.prototype);

返回的就是对象

prototype是函数的一个属性,也是函数的原型对象,而这里func函数引用prototype的时候返回的是一个对象object的,那么,结合这两个概念,你能得出什么结论呢?我想通过这不难得出结论:

function func(){
    
}
alert(JSON.stringify(func.prototype));

alert的结果是一个空对象

function func(){
    
}
func.prototype.name ='prototype是函数的的属性,本质是函数的原型对象';
alert(JSON.stringify(func.prototype))

因此,这里得出结论:prototype是函数的的属性,本质是函数的原型对象。

别以为js中只有对象才有属性,通过这里,我们也可以知道,其实js的函数也是有属性的,而且js的函数好像就只有这个属性prototype,而且js的这个函数属性同时还是函数的原型对象

为什么说prototype是函数的一个属性呢?因为,只有函数才能调用prototype,而且是以这样的方式func.prototype调用的,这样的方式调用东西是不是和对象调用属性一模一样呢?是的,就是因为函数调用prototype的时候是和对象调用属性的时候一样的,我们才把prototype说成是函数的一个属性,而函数的这个属性其实是一个对象(这个是不是对象,上面已经证明了,这里就不再说明),所以说,这个prototype就是函数的属性,本质是函数的原型对象。

这里为什么强调说prototype的本质是函数的原型对象呢?

    下面看代码证明,我的代码很简单的:

    //定义一个函数
    function func(){
    
    }
    //给函数的属性prototype赋予一个方法get
    func.prototype.get=function(value){
        return value;//很简单,你给我什么我就输出什么
    }

    你说,怎么调用上面那个get方法?

    我给你一点提示,get是属于func函数的一个属性函数,既然是属性函数,那么我们怎么调用呢?

    很简单,属性函数必须由它的对象来调用,那么我们怎么获取get的对象呢?很简单,用关键字new来实例化func函数的对象就行了吗?是吧?

没错,用func函数实例化出来的对象ob1,确实能够调用get函数,上面已经利用ob1调用get函数alert出来了,这就证明func函数的实例对象是拥有get这个属性函数的

特别指出:

           Array.prototype是一个数组

       String.prototype是一个字符串

       Object.prototype是一个对象

           这三个特殊例子,不像构造函数的prototype一样

    下面,实例化func函数的一个对象ob1:

var ob1 = new func();
//用func实例化出来的对象来调用get属性函数
alert(ob1.get('hello,prototype原型对象'));

要想深入理解可以看下一篇文章 深入理解js的prototype以及prototype的一些应用

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript 中的原型(prototype)是一个对象,它用于存储共享属性和方法,可以被其他对象继承。可以使用 prototype 属性来添加新的属性和方法到已有的对象构造函数中。 通过使用原型,可以在 JavaScript 中实现基于类的继承。下面是使用原型创建和扩展对象的示例: ```javascript // 创建一个构造函数 function Person(name) { this.name = name; } // 在构造函数的原型中添加方法 Person.prototype.sayHello = function() { console.log("Hello, my name is " + this.name); }; // 创建一个对象 var person1 = new Person("Alice"); // 调用原型中的方法 person1.sayHello(); // 输出 "Hello, my name is Alice" // 创建另一个对象 var person2 = new Person("Bob"); person2.sayHello(); // 输出 "Hello, my name is Bob" ``` 在上面的示例中,我们定义了一个 `Person` 构造函数,并在其原型上添加了 `sayHello` 方法。然后,我们创建了两个基于 `Person` 的对象 `person1` 和 `person2`,并调用了 `sayHello` 方法。 原型链允许对象继承其父对象属性和方法。可以通过 `Object.create()` 方法创建一个新对象并将其原型设置为另一个对象,从而实现继承。 ```javascript // 父对象构造函数 function Animal(name) { this.name = name; } // 父对象原型方法 Animal.prototype.sayName = function() { console.log("My name is " + this.name); }; // 子对象构造函数 function Dog(name, breed) { Animal.call(this, name); this.breed = breed; } // 继承父对象的原型 Dog.prototype = Object.create(Animal.prototype); // 子对象新增方法 Dog.prototype.bark = function() { console.log("Woof!"); }; // 创建一个 Dog 对象 var dog = new Dog("Max", "Labrador"); // 调用继承的父对象方法和子对象方法 dog.sayName(); // 输出 "My name is Max" dog.bark(); // 输出 "Woof!" ``` 在上面的示例中,我们创建了一个 `Animal` 父对象和一个 `Dog` 子对象。通过调用 `Object.create(Animal.prototype)` 来继承父对象的原型,并且使用 `Animal.call(this, name)` 在子对象构造函数中调用父对象的构造函数。 希望这些示例能够帮助你理解 JavaScript 中的原型方法。如果你有任何进一步的问题,请随时提问!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值