什么是原型链,它们的区别,在js中它们具体指什么 js中什么是原型对象和原型链

\u4ec0\u4e48\u662f\u4f5c\u7528\u57df\u94fe\uff0c\u4ec0\u4e48\u662f\u539f\u578b\u94fe\uff0c\u5b83\u4eec\u7684\u533a\u522b\uff0c\u5728js\u4e2d\u5b83\u4eec\u5177\u4f53\u6307\u4ec0\u4e48

\u5bf9\u4e8e javaScript \u53ea\u6709\u4e24\u79cd\u4f5c\u7528\u57df\uff0c\u5168\u5c40\u4f5c\u7528\u57df\u548c function \u4f5c\u7528\uff0c\u5982\u679c\u4e00\u4e2a function \u91cc\u8fd8\u6709function\uff0c \u90a3\u4e48\u8fd9\u4e2a function \u53c8\u662f\u4e00\u5757\u4f5c\u7528\u57df\uff0c\u5bf9\u4e8e\u4ed6\u7684\u5f97\u4e0a\u4e00\u5c42 function \u662f\u6709\u4e00\u4e2a\u5f15\u7528\u6307\u5411\u8fd9\u4e2a\u5feb\u4f5c\u7528\uff0c\u90a3\u4e48\u8fd9\u6837\u7684\u4e00\u5c42\u4e00\u5c42\u7684\u94fe\u5f0f\u5f15\u7528\u5173\u7cfb\u5c31\u662f\u4f5c\u7528\u57df\u94fe\uff0c\u800c\u539f\u578b\u94fe\u4e3b\u8981\u4e0eprototype\u3001__proto__\u6709\u5173\uff0c\u4fdd\u5b58\u7740\u5bf9\u8c61\u7684\u7ee7\u627f\u5173\u7cfb\u3002

\u6bcf\u4e2a JavaScript \u5bf9\u8c61\u5185\u90e8\u90fd\u6709\u4e00\u4e2a\u6307\u5411\u5176\u5b83\u5bf9\u8c61\u7684\u201c\u6307\u9488\u201d\u6216\u8005 \u201c\u5f15\u7528\u201c\uff0c \u5e76\u901a\u8fc7\u8fd9\u79cd\u65b9\u5f0f\u5728\u5bf9\u8c61\u4e4b\u95f4\u5efa\u7acb\u4e86\u4e00\u79cd\u8054\u7cfb\uff0c\u5f62\u6210\u4e86\u4e00\u79cd\u94fe\u5f0f\u7ed3\u6784\uff0c\u6211\u7684\u7406\u89e3\u8fd9\u5c31\u662f\u6240\u8c13\u7684\u539f\u578b\u94fe\u3002
function F() {} // F \u662f\u4e00\u4e2a\u51fd\u6570\uff0c\u51fd\u6570\u4e5f\u662f\u5bf9\u8c61\uff0c\u800c\u4e14\u6bcf\u4e2a\u51fd\u6570\u90fd\u6709\u4e00\u4e2a\u5c5e\u6027\u53eb\uff1a"prototype"var o = new F(); // F.prototype \u5c31\u662f o \u7684\u539f\u578b\u5bf9\u8c61console.log(o.name);// \u8f93\u51fa\uff1a undefinedF.prototype.name = "foo";console.log(o.name);// \u8f93\u51fa\uff1a foo// \u4e0a\u9762\u8fd9\u4e2a\u4f8b\u5b50\u662f\u60f3\u8bf4\u660e\uff1a\u901a\u8fc7 new \u5728\u5bf9\u8c61 o \u4e0e\u5bf9\u8c61 F.prototype \u4e4b\u95f4\u5efa\u7acb\u4e86\u8054\u7cfb\uff0c \u8fd9\u4e2a\u5efa\u7acb\u8054\u7cfb// \u7684\u65b9\u5f0f\u6709\u4eba\u53eb "\u539f\u578b\u7ee7\u627f" \u3002 \u5f53\u8bbf\u95ee\u7684\u5bf9\u8c61\u5c5e\u6027\u4e0d\u5b58\u5728\u65f6\uff0c\u5c31\u4f1a\u6cbf\u7740\u539f\u578b\u94fe\u53bb\u67e5\u627e\u3002

什么是作用域链,什么是原型链。

作用域是针对变量的,比如我们创建了一个函数,函数里面又包含了一个函数,那么现在就有三个作用域

全局作用域==>函数1作用域==>函数2作用域

作用域的特点就是,先在自己的变量范围中查找,如果找不到,就会沿着作用域往上找。

如:

var a = 1;function b(){    var a = 2;    function c(){        var a = 3;
console.log(a);
}
c();
}
b();

最后打印出来的是3,因为执行函数c()的时候它在自己的范围内找到了变量a所以就不会越上继续查找,如果在函数c()中没有找到则会继续向上找,一直会找到全局变量a,这个查找的过程就叫作用域链。

不知道你有没有疑问,函数c为什么可以在函数b中查找变量a,因为函数c是在函数b中创建的,也就是说函数c的作用域包括了函数b的作用域,当然也包括了全局作用域,但是函数b不能向函数c中查找变量,因为作用域只会向上查找。

那么什么是原型链呢?

原型链是针对构造函数的,比如我先创建了一个函数,然后通过一个变量new了这个函数,那么这个被new出来的函数就会继承创建出来的那个函数的属性,然后如果我访问new出来的这个函数的某个属性,但是我并没有在这个new出来的函数中定义这个变量,那么它就会往上(向创建出它的函数中)查找,这个查找的过程就叫做原型链。

Object ==> 构造函数1 ==> 构造函数2

就和css中的继承一样,如果自身没有定义就会继承父元素的样式。

function a(){};
a.prototype.name = "追梦子";var b = new a();
console.log(b.name); //追梦子



  • 鍦↗S闂寘閲岄潰濡備綍姹傚拰
    绛旓細姣斿:鍒殑鍑芥暟鍙兘璇敤杩欎簺鍙橀噺;閫犳垚鍏ㄥ眬瀵硅薄杩囦簬搴炲ぇ,褰卞搷璁块棶閫熷害(鍥犱负鍙橀噺鐨勫彇鍊兼槸闇瑕佷粠鍘熷瀷閾涓婇亶鍘嗙殑)銆傞櫎浜嗘瘡娆′娇鐢ㄥ彉閲忛兘鏄敤var鍏抽敭瀛楀,鎴戜滑鍦ㄥ疄闄呮儏鍐典笅缁忓父閬囧埌杩欐牱涓绉嶆儏鍐,鍗虫湁鐨勫嚱鏁板彧闇瑕佹墽琛屼竴娆,鍏跺唴閮ㄥ彉閲忔棤闇缁存姢,姣斿UI鐨勫垵濮嬪寲,閭d箞鎴戜滑鍙互浣跨敤闂寘:澶嶅埗浠g爜var data= { table : [], tree ...
  • 扩展阅读:石斛 释义 ... 什么是原型链一句话 ... 前端面试原型和原型链 ... 原型链用在什么地方 ... js原型和原型链的理解 ... 原型和原形的区别 ... 原型链最顶层是什么 ... 原型对象和原型链 ... 同样是什么 为什么 为什么 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网