美文网首页
js原型对象prototype

js原型对象prototype

作者: pretty_rain | 来源:发表于2019-01-25 16:14 被阅读0次

堆&栈:
两者都是存放临时数据的地方。
栈是先进后出的,就像一个桶,后进去的先出来,它下面本来有的东西要等其他出来之后才能出来。
堆是在程序运行时,而不是在程序编译时,申请某个大小的内存空间。即动态分配内存,对其访问和对一般内存的访问没有区别。对于堆,我们可以随心所欲的进行增加变量和删除变量,不用遵循次序。
栈区(stack) 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。
堆区(heap) 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。
堆(数据结构):堆可以被看成是一棵树,如:堆排序;
栈(数据结构):一种先进后出的数据结构。

1.原型只在内存中创建一次而构造函数是new一次创建一次

function Product() {
        this.name='';
        this.price=0;
    }
    //只在内存中保存一份  原型是公用的
    Product.prototype={
        buy:function(){
            alert(this.name+"价格:"+this.price);
        }
    }
    //内存中拷贝一份
    var iphone = new Product();
    iphone.name='iphone8';
    iphone.price=9000;
    //内存中拷贝一份
    var xiaomi = new Product();
    xiaomi.name="xiaomi7";
    xiaomi.price=2800;

    iphone.buy();
    xiaomi.buy();
    Product.prototype.buy();

2.属性搜索理论

属性搜索机制----先在自身属性列表中寻找,如果找到直接返回,找不到就从原型中寻找

function Product() {
        this.name='xiaomi';
        this.price=0;
    }
    //只在内存中保存一份  原型是公用的
    Product.prototype={
        name:'huawei',
        buy:function(){
            alert(11);
        }
    }

    //内存中拷贝一份
    var iphone = new Product();
    iphone.name='iphone8';
    iphone.price=9000;
    console.log(iphone.name);//iphone8
    //内存中拷贝一份
    var xiaomi = new Product();
    xiaomi.price=2800;
    console.log(xiaomi.name);//xiaomi

3.属性屏蔽机制

当构造函数和原型都有相同的属性时,原型的属性被屏蔽,如果想访问原型的,要加上prototype,通过构造函数获取自身原型属性Product.prototype.name;或者通过delete清除自身属性列表中的属性

function Product() {
        this.name='xiaomi';
        this.price=0;
    }
    //只在内存中保存一份  原型是公用的
    Product.prototype={
        name:'huawei',
        buy:function(){
            alert(11);
        }
    }

    //内存中拷贝一份
    var iphone = new Product();
    iphone.name='iphone8';
    iphone.price=9000;
    //屏蔽
    delete iphone.name;
    console.log(iphone.name);
    //内存中拷贝一份
    var xiaomi = new Product();
    xiaomi.price=2800;
    console.log(Product.prototype.name);

4.hasOwnProperty判断是不是自身的属性

function Product(){
        this.name='';
    }
    Product.prototype={
        img:{
            smallimg:"",
            bigimg:""
        }
    }
    var product =new Product();
    console.log(product.hasOwnProperty("name"));//true
    console.log(product.hasOwnProperty("img"))//false

5.字面量hasOwnProterty

    var product = {
        name:'',
        price:0,
        img:{
            small:"",
            big:""
        }
    }
    console.log(product.hasOwnProperty("name"));//true
    console.log(product.hasOwnProperty("img"));//true
    console.log(product.hasOwnProperty("big"));//false
    console.log(product.img.hasOwnProperty("big"));//true

7.for in 遍历对象属性

   /*普通对象模型*/
    function Product(){
        this.name="ww";
        this.price=22;
        this.buy=function(){};
    }
    Product.prototype={
        data:'2018/3/29'
    }
    var product = new Product();
    for(var a in product){
        console.log(a); // name  price  buy  data
    }
    for(var a in product){
        if(product.hasOwnProperty(a)){
            console.log(product[a]);//ww  22  f(){}
        }
    }

    var person = {
        name:"xiaoming",
        age:22,
        bike:function(){}
    }
    for(var a in person){
        console.log(a);//name  age  bike
    }
    for(var a in person){
        if(person.hasOwnProperty(a)){
            console.log(a);//name  age  bike 
        }
    }

8.面试题

   var fun = function(){}
    fun.prototype = {
        info : {
            name : 'peter',
            age : 25
        }
    }

    var a = new fun();
    var b = new fun();
    a.info.name = 'jack';
    b.info.name = 'tom';
    //用到了同一个原型  把原型的值改变了
    console.log(a.info.name)//tom
    console.log(b.info.name)//tom

相关文章

  • js中的prototype

    prototype翻译过来是原型的意思,在js中特指对象的原型prototype对象是js实现面向对象的一个重要机...

  • JS中继承的实现

    JS中继承的实现 #prototype (js原型(prototype)实现继承) 全局的Function对象没有...

  • js基础(三)

    js基础 原型链和原型对象 ... ... js没有继承原型对象prototype通常用来添加公共的属性或行为且只...

  • 原型和原型链的简单理解

    原型 在JS中原型就是prototype对象,用来表示类型之间的关系。 原型链 JS中对象和对象之间是有联系的,通...

  • prototype小结

    ### prototype 小结 - 构造函数有prototype属性指向其对应的原型对象: ```js // a...

  • JS中的继承

    js并不是想java一样面向对象,而是基于对象,所以js是通过prototype的原型链继承 prototype ...

  • JavaScript 学习

    JS 原型与原型链 每个对象都有 __proto__属性,但只有函数对象才有 prototype 属性 所有对象的...

  • JavaScript原型链

    js原型链 原型链是JS面向对象的基础非常重要 所有对象只有__proto__属性,而函数具有prototype属...

  • Prototype(原型对象)学习

    一、Prototype(原型对象) js中的每一个对象,都有一个原型对象;Data对象有一个原型对象Data.pr...

  • JS重要概念之原型与原型链

    #Prototype原型对象 原型对象Function.prototype,具备以下特点:原型对象prototyp...

网友评论

      本文标题:js原型对象prototype

      本文链接:https://www.haomeiwen.com/subject/vbzmjqtx.html