zoukankan      html  css  js  c++  java
  • JS原型

    原型与类

    类是一个抽象的,可以构造对象,就是一个抽象到具体的过程。一般用new。


    原型:是一个具体到具体的过程。
    使用现有的对象,去构造一个新的对象。

    有两种方法从原型来构造对象。

    (1) Object.create();

    Object.create(proto, [propertiesObject])
    - proto 一个对象,作为新创建对象的原型。
    - properiesObject 对象的属性定义。

    每个实例对象都有一个 __proto__属性指向原型,公用其中的方法和属性。
    这个属性是一个隐私属性,不可以被修改。

    <script type="text/javascript">
    	var A = {
    		name : 'aaa',
    		start : function () {
    			console.log('%s start ', this.name);
    		},
    		end : function () {
    			console.log('%s end ', this.name);
    		}
    	}
    
    	var aaa = Object.create(A);
    	aaa.start();            // aaa start
    	aaa.logo = 'first';		//创建新的属性
    
    	var bbb = Object.create(A);
    	bbb.start();            // aaa start
    	bbb.logo = 'second';
    
    	console.log(aaa.logo + " " + bbb.logo);    // first second
    
    </script>
    

     

    (2) 构造函数

    函数有一个prototype属性。
    使用构造函数创建对象,每个对象都有一个原型,就是prototyoe这个属性。
    用new创建对象,就是构造函数

    function Person (name) {
    	this.name = name;
    }
    
    Person.prototype = {
    	start :function() {
    		console.log('%s start', this.name);
    	},
    	run : function () {
    		console.log("%s is running...", this.name);
    	}
    }
    
    var lily = new Person('lily');
    var tom = new Person('ton');
    
    
    lily.run();		//lily is running...
    tom.run();		//ton is running...
    

    new 创建一个对象分为三步。
    (1)首先,创建一个lily的Person的对象
    (2)设置lily的_porto_的这个属性,指向Person.prototype。
    (3)Person.call(lily, arguments);使用Person类去初始化lily对象。(看,这里最后还是用call来改变this创建对象的。)

    型链--实例


    对象的原型链从最下层的对象,到最高的Object.prototype,截至。
    并且就近原则。找到最近的进行操作。

    对象的操作,无论是修改还是删除属性,都不会对原型上面进行影响。


    hasOwnProperty:方法,来源于Object.prototype上面。
    判断传入的属性是不是对象自身的属性。
    传入的属性如果返回时假,要么属性在原型上面,要么不存在。

    lily.hasOwnProperty('name'); // true
    lily.hasOwnProperty('logo'); // false


    函数也是对象 来源于 Function() { }
    而Function自己也有_proto_ , 最终指向Object.prototype.

  • 相关阅读:
    stl的erase()陷阱--迭代器失效总结
    .NET Framework 概述
    C#在代码中编写输出debug信息-类Debug的使用
    C# 开发的windows服务 不能调试——讨论整理
    C#开发windows服务如何调试——资料整理
    iis深入学习资源
    网站因权限问题报错
    数据库建表经验总结——建表现象—sql查询疑惑
    java8大基本类型
    存储过程中的事务
  • 原文地址:https://www.cnblogs.com/hgonlywj/p/4857389.html
Copyright © 2011-2022 走看看