原型

作者: 浮巷旧人 | 来源:发表于2018-08-01 21:27 被阅读0次

    原型

    1.定义:原型是function对象的一个属性,它定义了构造函数制造出的对象的公共祖先。通过该构造函数产生的对象,可以继承该原型的属性和方法。原型也是对象。

    Person.prototype --原型
    Person.prototype = {} 是祖先
    Person.prototype.name = "Deng";
    function Person() {

    }
    var person = new Person();
    var person1 = new Person();

    Car.prototype.height = 1400;
    Car.prototype.lang = 4900;
    Car.prototype.carName = 'BMW';
    function Car(color,owner) {
    this.owner = owner;
    this.color = color;
    }
    var car = new Car('red', 'prof.ji');
    var car1 = new Car('green', 'laodeng');
    通过后代例如car是不能改变原型的属性
    car如果没有某个属性 会去祖先里找

    • 写法也可以聚在一起写
      Car.prototype = {
      height : 1400,
      lang : 4900,
      carName : 'BMW'
      }

    car.constructor 构造器的意思
    => function Car () {
    }
    如果 Car.prototype = {
    constructor : person
    } 那么就会改变构造器的值

    Person.prototype.name = 'abc';
    function  Person() {
    //  var this = {
    // 
    // __proto__:Person.prototype
    //}
    var obj = {
        name:'sunny'
    }
    var person = new Person ();
    person.__proto__ = obj;
     
    proto是指向对象原型的,会去原型里找 ,但是这
    里把原型改了,指向了obj.
    
    Person.prototype.name = 'sunny';
    function  Person() {
    / var this = { __proto__:Person.prototype}
    }
    var person = new Person();
    1)如果加上这句Person.prototype.name = 'cherry'
    这里只是相当于把房间里的内容改了,最后person.name='cherry'
    2)如果Person.prototype = {name:'cherry'},这里
    想让于加了个房间 换了个人  所以 person.name = 'sunny' 
    /以上两种情况仅限于仅限于在 new执行之后
    3)
    function  Person() {
    /  var this = { __proto__:Person.prototype}
    }
    Person.prototype.name = 'sunny';
    Person.prototype = {
             name : 'cherry‘
    }
    var person = new Person();
    这种情况是new没生成之前下面的把上面覆盖了 所
    以最后person.name = 'cherry'.
    
    • 构造函数只要new执行 ,必默认生成var this = {__proto __ :函数名.prototype}
    • 绝大多数对象的最终都会继承自Object.prototype
    Grand.prototype.__proto__ = Object.prototype
     Object.prototype.__proto__ = null
    Grand.prototype.lastName = 'Deng';
    function  Grand() {
    }
    var   grand = new Grand();
    Father.prototype = grand;
    function Father() {
            this.name = 'xuming';
            this.forture = {
                card : 'visa'
            };
            this.num = 100;
    }
    var  father =    new Father();
    
    Son.prototype = father;
    function Son() {
              this.hobbit = "smoke";
    }
    var  son = new Son();
    eg: son.forture = 200 father无影响
      son.forture.card1 = "master"  father 自动加上了
    
    son.num ++(=son.num+1); return100
    father.num = 100 
    son.num = 101
    
    Person.prototype = {
           name : "a",
           sayName : function () {
                 console.log(this.name);
         }
    }
    function  Person() {
             this.name = "b"
    }
    var person = new Person();
    sayName里面的this指向谁,谁调用的方法,this就是谁
    person.sayName()   => b
    Person.prototype.sayName()  =>a
    
    var obj = {}; 相当于 系统内部自动 new Object();
    
    - var  obj = Object.create(原型); 
    
    var  obj = {name : "sunny", age :123};
    var   obj1 = Object.create(obj);
    所以obj1的原型就是obj  obj1.name = 'sunny'
    
    Person.prototype.name = "sunny";
    function  Person() {
              
    }
    var person = Object.create(Person.prototype);
    

    Object.create( );里面只能是 object or null
    undefined.to string() null.to string()是报错的 不存在的

    var num = 123;
    //num.toString(); --> new Number (num).toString();
    Number.prototype.toString = function () {
    }这种方法叫重写 实现同名但不同功能的东西,number里有tostring这个功能 就不会去上级object里面去找了
    //Number.prototype._proto _ = Object.prototype
    // Object.prototype.toString = function(){
    }

    eg:
    // Object.prototype.toString = function(){
    // } 系统自带的方法
    Person.prototype = {
    toString : function () {
    return 'hehe';
    }
    }
    function Person() {

    }
    var person = new Person ():

    Object.prototype.toString.call(123)
    "[object Number]"
    Object.prototype.toString.call(true)
    "[object Boolean]"返回的是类型

    var obj = Object.create(null);
    obj.toString = function () {
        return "老邓身体好";
    }
    document.write(obj);
    隐式的调用toString方法  如果不是人为的加上
    obj.toString = function () {
        return "老邓身体好";
    } 就会报错
    

    Math.ceil(123.234) -->124
    Math.floor(123.234) -->123
    Math.random( ) 产生一个0~1之间的随机数

    for(var i = 0; i<10; i++){
         var num = Math.floor(Math.random() * 100)
          console.log(num);
    }随机一个数取0~100

    相关文章

      网友评论

          本文标题:原型

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